簡體   English   中英

如何為邏輯聚合數據並在輸出中顯示非聚合結果?

[英]How to aggregate data for logic and show non-aggregated results in the output?

我有一張如下所示的表格:

水果 日期
一個 蘋果 xxxx
香蕉 xxxx
C 蘋果 xxxx
一個 香蕉 xxxx
C 蘋果 xxxx
香蕉 xxxx

我對數據集中擁有不止一根香蕉的人感興趣。 在這種情況下,將是 B 人。我了解如何通過聚合數據來實現這一點。 但是,如果我希望我的結果不被聚合並且看起來像下面這樣,那么最好的方法是什么?

水果 日期
香蕉 xxxx
香蕉 xxxx

您可以通過在子查詢中使用窗口函數(在本例中使用count_if聚合函數)並過濾結果來實現此目的:

-- sample data
WITH dataset(person, fruit, date) AS (
    VALUES ('A',    'apple' ,'xxxx'),
    ('B',   'banana'    ,'xxxx'),
    ('C',   'apple' ,'xxxx'),
    ('A',   'banana'    ,'xxxx'),
    ('C',   'apple' ,'xxxx'),
    ('B',   'banana'    ,'xxxx')
)

-- query
select person, fruit, date
from (select *,
          count_if(fruit = 'banana') over(partition by person) banana_count
      from dataset)
where banana_count > 1

輸出:

水果 日期
香蕉 xxxx
香蕉 xxxx

您可以使用諸如SUM() OVER ()之類的窗口函數以及條件聚合:

SELECT person, fruit, date
  FROM (SELECT SUM(CASE
                     WHEN fruit = 'banana' THEN
                          1
                     END) OVER( PARTITION BY person ) AS cnt
          FROM t) tt
 WHERE cnt > 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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