我有一张这样的table:
-----------------------
| Name | Date |
-----------------------
| John | July |
| Carl | August |
| John | July |
| Robert | August |
| Carl | September |
| John | August |
| Carl | August |
| John | July |
| Robert | September |
| Carl | August |
-----------------------
我想数名字除以月份。
SELECT Name,
COUNT(IF(`Date` = 'July',1,0)) AS July,
COUNT(IF(`Date` = 'August',1,0)) AS August,
COUNT(IF(`Date` = 'September',1,0)) AS September,
COUNT(*) AS All FROM table
GROUP BY Name
我尝试了这个查询,但是都是一样的
7条答案
按热度按时间kcugc4gi1#
参考文献:https://stackoverflow.com/a/13075582/1688441
mrwjdhj32#
COUNT
计数非空值,请重试SUM
```SELECT Name,
SUM(IF(
Date
= 'July',1,0)) AS July,SUM(IF(
Date
= 'August',1,0)) AS August,SUM(IF(
Date
= 'September',1,0)) AS September,COUNT(*) AS All FROM table
GROUP BY Name
13z8s7eq3#
发生这种情况的原因很简单:
COUNT()
只计算值的发生次数。(=数据集中有多少个值?)这样看,
0
只是另一个值1
也是。您可以:
这是因为聚合函数
COUNT()
忽略NULL
价值观。或者,就像其他人回答的那样,你可以
SUM()
所有的1
价值观:这是写得更短,因为评估
field = value
已经回来了1
如果匹配,则返回0。不需要 PackageIF()
周围的人也做同样的事。j2datikz4#
应该给你一些
http://sqlfiddle.com/#!9/c0a483/2号机组
ki1q1bka5#
最简单的方法就是试试这个。带bool(0或1)的条件聚合函数
xbp102n06#
count
计算不存在的值null
-包括零。带着那些if
s、 你可以使用sum
模仿count
-您将有效地计算1
学生:mu0hgdu07#
尝试
SELECT Name, Date, Count(*) as Count FROM table GROUP BY Name,Date
它应该返回如下内容:看看这把小提琴。