簡體   English   中英

SQL - 根據其他列的某些條件查詢 SUM

[英]SQL - query to SUM based on certain criteria from other columns

我有一個問題,我需要根據不同列的標准對美元進行分類匯總。 例如,可以通過多種方式對客戶端進行分類,在類別中,唯一重要的是 HIT。 如果客戶端至少有一行包含 HIT,則即使該特定行不是,也應始終將其歸類為 HIT(例如(第 9 行)。正如您在我的數據集中看到的那樣,客戶端 A 的行都是 HIT和 NONE 但由於客戶 A 至少有一條線是 HIT,所有的美元都應該歸類為 HITS 美元。由於其他客戶都沒有 HIT 類別,他們所有的美元都將 go 變為 NOT。

CLIENT  DOLLARS CATEGORY 
A   12434   HIT 
B   212 NONE 
C   21  NONE 
D   1231    NONE
B   784 NONE 
A   43577   HIT 
D   64  NONE 
A   123 NONE 
D   12  NONE 
A   53  NONE
A   10  NONE

我正在嘗試將其構建為 CASE 即。

SELECT CASE
WHEN category = 'HIT' THEN 'HITS'
WHEN category <> 'HIT' THEN 'NOT'
ELSE 'OTHER' END AS 'RESULT'
SUM(dollars) AS Dollars
FROM table 1
GROUP BY 'RESULT'

顯然,當類別為 NONE 時,這不會為客戶 A 獲得 HIT Dollars。 任何幫助將不勝感激。

謝謝!

您需要更多信息。 我建議 window 功能:

SELECT (CASE WHEN is_hit = 1 THEN 'HITS'
             ELSE 'NOT'
        END) as result,
       SUM(dollars) AS Sum_Dollars
FROM (SELECT dollars, 
             MAX(CASE WHEN category = 'HIT' THEN 1 ELSE 0 END) OVER (PARTITION BY client) as is_hit
      FROM t
     )
GROUP BY is_hit

SQL 小提琴: http://sqlfiddle.com/#!4/40351/6

您可以使用列出命中客戶的子查詢加入您的表:

select (case when (hits.client is null)
             then 0
             else 1
        end) as hit,
       sum(dollars) as Dollars
from t
left outer join ( select distinct client
                  from t
                  where category = 'HIT' ) hits
on t.client = hits.client
group by hit;

SQL 小提琴: http://sqlfiddle.com/#!9/8d403e/7/0

暫無
暫無

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

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