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