MYSQL选择按值计数

时间:2011-09-09 20:44:57

标签: mysql select count

我有这个mysql表:

DATE | VALUE

我希望成为一个选择,向我显示以下信息:

DATE | COUNT TOTAL | COUNT VAL=1 | COUNT VAL=2

我是如何实现这一目标的?

谢谢!

3 个答案:

答案 0 :(得分:16)

SELECT date,
       COUNT(*),
       COUNT( IF( value = 1, 1, NULL ) ),
       COUNT( IF( value = 2, 1, NULL ) )
FROM my_table

答案 1 :(得分:2)

我认为使用SUM()可以获得更整洁的代码。因为它将行的各个表达式的值相加。

SELECT date,
   COUNT(*),
   SUM( value = 1 ),
   SUM( value = 2 )
FROM my_table

可以找到官方文档here

答案 2 :(得分:0)

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。空值不计入COUNT()

我想你可能想要一个动态数量的列,为数据中找到的每个值一列。 这在SQL中是不可能的。在编写查询时必须知道列。

因此,您有两种方法可以获得每个值的小计:

  • 首先查询value的所有行中的不同值并动态构造SQL查询,在选择列表中为要报告的每个不同值附加一列。然后运行此SQL查询。

  • 或者,将所有行作为行获取。计算应用程序代码中每个值的小计。

另一个替代方法是按组计算小计,并包括总计:

SELECT `value`, `date, COUNT(*) AS `COUNT SUBTOTAL`
FROM mytable
GROUP BY `value`, `date` WITH ROLLUP

但是,这不会按照您的要求报告列中的小计,它会按行报告小计。