在 SQL 中,如果我試圖從影像中洗掉紅色突出顯示的行,有人可以幫助我了解查詢的外觀嗎?根據我需要的邏輯,我需要洗掉選項中具有不同優先級值的記錄,因為我們要保留的記錄具有相同的優先級。每個 item/cntry 組合都有它自己的選項值(通常是 4,如您在此處看到的)。
我覺得這只是一個連接本身,但我現在的想法是糊狀的。幫助將不勝感激!

uj5u.com熱心網友回復:
您可以使用分析COUNT(DISTINCT ...)功能,然后不需要使用自聯接:
SELECT *
FROM (
SELECT t.*,
COUNT(DISTINCT priority) OVER (PARTITION BY cntry, item, "OPTION")
AS cnt
FROM table_name t
)
WHERE cnt = 1;
其中,對于樣本資料:
CREATE TABLE table_name ("OPTION", priority, item, cntry) AS
SELECT 1, 1, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 1, 1, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 2, 2, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 2, 1, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 3, 1, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 3, 2, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 4, 2, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 4, 2, 'ABCDEF', 'USA' FROM DUAL UNION ALL
SELECT 1, 1, 'HIJKLM', 'CAN' FROM DUAL UNION ALL
SELECT 2, 2, 'HIJKLM', 'CAN' FROM DUAL UNION ALL
SELECT 2, 2, 'HIJKLM', 'CAN' FROM DUAL UNION ALL
SELECT 2, 1, 'HIJKLM', 'CAN' FROM DUAL UNION ALL
SELECT 3, 1, 'HIJKLM', 'CAN' FROM DUAL UNION ALL
SELECT 3, 1, 'HIJKLM', 'CAN' FROM DUAL UNION ALL
SELECT 3, 1, 'HIJKLM', 'CAN' FROM DUAL UNION ALL
SELECT 4, 2, 'HIJKLM', 'CAN' FROM DUAL;
輸出:
選項 優先 物品 國泰 碳納米管 1 1 海荷航 能夠 1 3 1 海荷航 能夠 1 3 1 海荷航 能夠 1 3 1 海荷航 能夠 1 4 2 海荷航 能夠 1 1 1 ABCDEF 美國 1 1 1 ABCDEF 美國 1 4 2 ABCDEF 美國 1 4 2 ABCDEF 美國 1
db<>在這里擺弄
uj5u.com熱心網友回復:
使用存在和不同的計數()
select t1.* from table_name t1 where
exists (
select 1
from table_name t2
where t1.option=t2.option
group by option
having count (distinct priority)=1
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/435449.html
下一篇:如何優化分層查詢
