簡體   English   中英

MYSQL選擇按值計數

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

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