[英]SQL subquery to get all rows of columns where other column value does not exist
[英]Removing all rows where a column entry is only listed once, but display all other columns too (subquery)
我想通過刪除所有只列出一次或兩次的特定列來清理我的數據。 目前看起來像這樣:
水果 | 年 | 單位 |
---|---|---|
蘋果 | 2018年 | 20000 |
橘子 | 2018年 | 600 |
蘋果/橘子 | 2018年 | 3000 |
橘子 | 2017年 | 6000 |
蘋果 | 2016年 | 2000 |
橘子 | 2016年 | 2000 |
蘋果 | 2017年 | 50000 |
土豆 | 2017年 | 9000 |
蘋果/橘子 | 2016年 | 5000 |
我希望它看起來像這樣:
水果 | 年 | 單位 |
---|---|---|
蘋果 | 2018年 | 20000 |
橘子 | 2018年 | 600 |
蘋果 | 2017年 | 50000 |
橘子 | 2017年 | 6000 |
蘋果 | 2016年 | 2000 |
橘子 | 2016年 | 2000 |
實際上,表中的 Fruit 單個條目比這個多得多,所以我不能只排除使用長where
語句。
嘗試的解決方案
我試圖通過使用一個子查詢來簡化數據,該子查詢計算“水果”條目出現的次數,然后僅顯示出現兩次或更多次的行。 它作為獨立查詢工作,但不適用於還包括其他列的較大查詢。
SELECT "Fruit"
,count("Fruit") as cnt
,"Year"
,"Units"
FROM example_table
WHERE(SELECT count("Fruit") as cnt
FROM example_table
HAVING cnt > 2)
GROUP BY "Fruit"
,"Year"
,"Units"
這是我收到的錯誤消息:
Invalid data type [NUMBER(18,0)] for predicate [(SELECT COUNT(EXAMPLE_TABLE."Fruit") AS "CNT" FROM EXAMPLE_TABLE AS EXAMPLE_TABLE HAVING CNT > 2)]
一種方法是獲取超過 2 個的水果名稱,然后你可以 select 它們。
SELECT *
FROM example_table
WHERE Fruit in (
SELECT Fruit
FROM example_table
group by Fruit
having count(Fruit) > 2)
;
使用的功能;
WITH CTE AS
(SELECT 'apples' FRUITS, 2018 YEAR, 20000 UNITS
UNION ALL SELECT 'oranges', 2018 YEAR, 600 UNITS
UNION ALL SELECT 'oranges', 2017 YEAR, 6000 UNITS
UNION ALL SELECT 'apples', 2016 YEAR, 2000 UNITS
UNION ALL SELECT 'oranges', 2016 YEAR, 2000 UNITS
UNION ALL SELECT 'apples', 2017 YEAR, 50000 UNITS
UNION ALL SELECT 'potato', 2017 YEAR, 9000 UNITS
UNION ALL SELECT 'apples/oranges' , 2016, 5000
UNION ALL SELECT 'apples/oranges', 2018, 3000 )
SELECT * FROM CTE
QUALIFY COUNT(DISTINCT YEAR)OVER(PARTITION BY FRUITS)>2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.