我需要找到一個價值組合串列,將機會識別為不存在的組合。我的資料看起來像這樣。
| 公司 | 產品 |
|---|---|
| 一種 | 1 |
| 一種 | 2 |
| 一種 | 3 |
| 乙 | 2 |
| C | 1 |
| C | 3 |
| D | 1 |
| 乙 | 2 |
| 乙 | 4 |
我想確定至少有 3 家公司銷售的產品,然后告訴那些不銷售的公司哪些產品很受歡迎。對于此示例,產品 1 和 2 由至少 3 家公司銷售。產品 1 沒有被公司 B 和 E 銷售,產品 2 沒有被公司 C 和 D 銷售。查詢結果如下所示。
| 公司 | 產品 |
|---|---|
| 乙 | 1 |
| 乙 | 1 |
| C | 2 |
| D | 2 |
Oracle 是資料庫,實際行數約為 1M。
uj5u.com熱心網友回復:
您可以聚合并使用HAVING子句查找滿足閾值的產品,然后使用PARTITIONedOUTER JOIN查找不匹配的行:
SELECT t.company, p.product
FROM ( SELECT product
FROM table_name
GROUP BY product
HAVING COUNT(DISTINCT Company) >= 3) p
LEFT OUTER JOIN table_name t
PARTITION BY (t.company)
ON (p.product = t.product)
WHERE t.product IS NULL
其中,對于您的示例資料:
CREATE TABLE table_name (Company, Product) AS
SELECT 'A', 1 FROM DUAL UNION ALL
SELECT 'A', 2 FROM DUAL UNION ALL
SELECT 'A', 3 FROM DUAL UNION ALL
SELECT 'B', 2 FROM DUAL UNION ALL
SELECT 'C', 1 FROM DUAL UNION ALL
SELECT 'C', 3 FROM DUAL UNION ALL
SELECT 'D', 1 FROM DUAL UNION ALL
SELECT 'E', 2 FROM DUAL UNION ALL
SELECT 'E', 4 FROM DUAL;
輸出:
公司 產品 乙 1 C 2 D 2 乙 1
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461919.html
下一篇:OracleSQL-在具有大量時間戳的(大)表中計算sysdate和sysdate-7天前之間資料的差異(并回傳增長百分比)
