繁体   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