[英]MYSQL select count by value
我有這個mysql表:
DATE | VALUE
我希望成為一個選擇,向我顯示這些信息:
DATE | COUNT TOTAL | COUNT VAL=1 | COUNT VAL=2
我有什么想法可以達到這個目的嗎?
謝謝!
SELECT date,
COUNT(*),
COUNT( IF( value = 1, 1, NULL ) ),
COUNT( IF( value = 2, 1, NULL ) )
FROM my_table
我認為使用SUM()
可以獲得更整潔的代碼。 因為它將行的各個表達式的值相加。
SELECT date,
COUNT(*),
SUM( value = 1 ),
SUM( value = 2 )
FROM my_table
官方文檔可以在這里找到。
SELECT `date`, COUNT(*) AS `COUNT TOTAL`,
COUNT(CASE `value` WHEN 1 THEN `value` END) AS `COUNT VAL=1`
COUNT(CASE `value` WHEN 2 THEN `value` END) AS `COUNT VAL=2`
FROM mytable
GROUP BY `date`
沒有匹配時,CASE表達式將為null。 NUNT不計入COUNT()
。
我想你可能想要一個動態數量的列,數據中找到的每個值都有一列。 這在SQL中是不可能的。 在編寫查詢時必須知道列。
因此,您有兩個選項可以獲得每個值的小計:
首先查詢所有值行中的不同value
並動態構造SQL查詢,在select-list中為要報告的每個不同值附加一列。 然后運行此SQL查詢。
或者,將所有行作為行獲取。 計算應用程序代碼中每個值的小計。
另一個替代方法是按組計算小計,並包括總計:
SELECT `value`, `date, COUNT(*) AS `COUNT SUBTOTAL`
FROM mytable
GROUP BY `value`, `date` WITH ROLLUP
但是,這並不按您的要求報告列中的小計,它會按行報告小計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.