我需要弄清楚如何從下表中獲取結果,并且只顯示影像中綠色突出顯示的行。在每個 account_id/site_id 組合中(示例中顯示了兩個 - 123/usa 和 456/can),我只需將 group_ids 保留在品牌的 Y(標志)數量較多的地方(如在side_id "can" - 該品牌的 group_id 1 中的 Y 比 group_id 2 中的 Y 多)。在 account_id/site 組合中,如果有兩個 group_ids 對于一個品牌有兩個以上的 Y,則保留它們(如 site_id “usa”所示)。
| group_id | 帳戶ID | site_id | 品牌 | 旗幟 |
|---|---|---|---|---|
| 1 | 123 | 美國 | 豐田 | ? |
| 1 | 123 | 美國 | 豐田 | ? |
| 1 | 123 | 美國 | 特斯拉 | 是 |
| 1 | 123 | 美國 | 特斯拉 | 是 |
| 2 | 123 | 美國 | 豐田 | 是 |
| 2 | 123 | 美國 | 豐田 | ? |
| 2 | 123 | 美國 | 特斯拉 | 是 |
| 2 | 123 | 美國 | 特斯拉 | ? |
| 3 | 123 | 美國 | 豐田 | 是 |
| 3 | 123 | 美國 | 豐田 | ? |
| 3 | 123 | 美國 | 特斯拉 | 是 |
| 3 | 123 | 美國 | 特斯拉 | ? |
| 4 | 123 | 美國 | 豐田 | 是 |
| 4 | 123 | 美國 | 豐田 | 是 |
| 4 | 123 | 美國 | 特斯拉 | ? |
| 4 | 123 | 美國 | 特斯拉 | ? |
| 1 | 456 | 能夠 | 本田 | 是 |
| 1 | 456 | 能夠 | 本田 | 是 |
| 1 | 456 | 能夠 | 本田 | 是 |
| 2 | 456 | 能夠 | 本田 | 是 |
| 2 | 456 | 能夠 | 本田 | ? |
| 2 | 456 | 能夠 | 本田 | 是 |

uj5u.com熱心網友回復:
通過使用視窗函式的組合,您可以計算每個組/帳戶/站點/品牌的 Y 標志的數量,然后用另一個分析函式找到那些磁區的 Y 標志的最大數量,然后只回傳這兩個所在的行值匹配。
詢問
WITH
grps (GROUP_ID,
account_id,
site_id,
brand,
flag)
AS
(SELECT 1, 123, 'usa', 'toyota', 'N' FROM DUAL
UNION ALL
SELECT 1, 123, 'usa', 'toyota', 'N' FROM DUAL
UNION ALL
SELECT 1, 123, 'usa', 'tesla', 'Y' FROM DUAL
UNION ALL
SELECT 1, 123, 'usa', 'tesla', 'Y' FROM DUAL
UNION ALL
SELECT 2, 123, 'usa', 'toyota', 'Y' FROM DUAL
UNION ALL
SELECT 2, 123, 'usa', 'toyota', 'N' FROM DUAL
UNION ALL
SELECT 2, 123, 'usa', 'tesla', 'Y' FROM DUAL
UNION ALL
SELECT 2, 123, 'usa', 'tesla', 'N' FROM DUAL
UNION ALL
SELECT 3, 123, 'usa', 'toyota', 'Y' FROM DUAL
UNION ALL
SELECT 3, 123, 'usa', 'toyota', 'N' FROM DUAL
UNION ALL
SELECT 3, 123, 'usa', 'tesla', 'Y' FROM DUAL
UNION ALL
SELECT 3, 123, 'usa', 'tesla', 'N' FROM DUAL
UNION ALL
SELECT 4, 123, 'usa', 'toyota', 'Y' FROM DUAL
UNION ALL
SELECT 4, 123, 'usa', 'toyota', 'Y' FROM DUAL
UNION ALL
SELECT 4, 123, 'usa', 'tesla', 'N' FROM DUAL
UNION ALL
SELECT 4, 123, 'usa', 'tesla', 'N' FROM DUAL
UNION ALL
SELECT 1, 456, 'can', 'honda', 'Y' FROM DUAL
UNION ALL
SELECT 1, 456, 'can', 'honda', 'Y' FROM DUAL
UNION ALL
SELECT 1, 456, 'can', 'honda', 'Y' FROM DUAL
UNION ALL
SELECT 2, 456, 'can', 'honda', 'Y' FROM DUAL
UNION ALL
SELECT 2, 456, 'can', 'honda', 'N' FROM DUAL
UNION ALL
SELECT 2, 456, 'can', 'honda', 'Y' FROM DUAL)
SELECT g3.GROUP_ID,
g3.account_id,
g3.site_id,
g3.brand,
g3.flag
FROM (SELECT g2.*, MAX (g2.y_flag_cnt) OVER (PARTITION BY account_id) AS max_y_flag_cnt
FROM (SELECT g.*,
SUM (CASE WHEN flag = 'Y' THEN 1 ELSE 0 END)
OVER (PARTITION BY GROUP_ID,
account_id,
site_id,
brand) AS y_flag_cnt
FROM grps g) g2) g3
WHERE flag = 'Y' AND y_flag_cnt = max_y_flag_cnt
ORDER BY account_id, GROUP_ID;
輸出
GROUP_ID ACCOUNT_ID SITE_ID BRAND FLAG
___________ _____________ __________ _________ _______
1 123 usa tesla Y
1 123 usa tesla Y
4 123 usa toyota Y
4 123 usa toyota Y
1 456 can honda Y
1 456 can honda Y
1 456 can honda Y
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439330.html
