簡體   English   中英

刪除列條目僅列出一次的所有行,但也顯示所有其他列(子查詢)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM