簡體   English   中英

多個計數報表/條件

[英]Multiple count statements/conditions

我有以下列如下:

Product_ID,sale_price,sale_count,sale_state
9923842,49.99,329,CA
2940820,55.25,430,WA
2039483,32.45,23,OR
9348234,55.02,26,NY
1948134,99.42,200,VA
3948579,43.49,994,MA
2034209,934.3,430,FL

我試圖通過西海岸與東海岸(CA和OR是西海岸,紐約和MA在東部等等)的銷售數量> 100的州的海岸找到計數。 所以結果如下:

coast,count,total_count
East,3,4
West,2,3

...其中total_count是該海岸上的州總數,與銷售計數無關

我能想到的唯一方法是創建一個具有狀態/海岸映射的表,然后將其用作參考。 有沒有更好的方法,而不必訴諸臨時表?

這目前正在MySQL中完成,但我想要一個平台無關的解決方案,因為這可能很快被移植到另一個平台。

這是一種標准的ANSI方式,我希望這應該有效

    SELECT 'East' AS Coast, 
           SUM(CASE WHEN sale_count > 100 THEN 1 ELSE 0 END) AS cnt, 
           COUNT(*) AS total_count 
    FROM table 
    WHERE sale_state IN ('NY','MA')

    UNION ALL

    SELECT 'West' AS Coast, 
           SUM(CASE WHEN sale_count > 100 THEN 1 ELSE 0 END) AS cnt, 
           COUNT(*) AS total_count 
    FROM table 
    WHERE sale_state IN ('CA','OR')

我來自歐盟所以我讓你完成各州的名單......

編輯:這個包含count和total_count,如上面的評論中所述

SELECT coast, SUM(sale_cnt) AS count, COUNT(*) AS total_count
FROM T LEFT JOIN
(SELECT sale_state,
CASE 
WHEN sale_state IN ('CA','WA','OR') THEN 'West'
WHEN sale_state IN ('NY','VA','MA','FL') THEN 'East' END AS coast,
CASE
WHEN sale_count > 100 THEN 1
ELSE 0 END AS sale_cnt
FROM T) C
ON T.sale_state = C.sale_state
GROUP BY coast

暫無
暫無

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

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