我有一张这样的桌子:
----------------------- | 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
我尝试了此查询,但计数值都相同
答案 0 :(得分:2)
发生这种情况的原因很简单:COUNT()
仅计算值的出现次数。 (=数据集中有多少个值?)
以这种方式来看,0
就像1
一样是另一个值。
您可以执行以下操作:
SELECT Name,
COUNT(IF(`Date` = 'July', 1, NULL)) AS July,
COUNT(IF(`Date` = 'August', 1, NULL)) AS August,
COUNT(IF(`Date` = 'September', 1, NULL)) AS September,
COUNT(*) AS All FROM table
GROUP BY Name
之所以可行,是因为COUNT()
之类的聚合函数会忽略NULL
值。
或者,正如其他人回答的那样,您可能只SUM()
个所有1
值:
SELECT Name,
SUM(`Date` = 'July') AS July,
SUM(`Date` = 'August') AS August,
SUM(`Date` = 'September') AS September,
COUNT(*) AS All FROM table
GROUP BY Name
这写得短些,因为评估field = value
如果匹配则已经返回1
,否则返回0。无需包装IF()
即可完全相同。
答案 1 :(得分:1)
您可以尝试的最简单方法。 条件集合函数带有布尔值(0或1)
SELECT Name,
SUM(`Date` = 'July') AS July,
SUM(`Date` = 'August') AS August,
SUM(`Date` = 'September') AS September,
COUNT(*) AS All
FROM table
GROUP BY Name
答案 2 :(得分:1)
SELECT name,
SUM(IF(`month` = 'July',1,0)) AS July,
SUM(IF(`month` = 'August',1,0)) AS August,
SUM(IF(`month` = 'September',1,0)) AS September,
COUNT(*) FROM test
GROUP BY name;
答案 3 :(得分:0)
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
答案 4 :(得分:0)
尝试SELECT Name, Date, Count(*) as Count FROM table GROUP BY Name,Date
它应该返回如下内容:
| Name | Date | Count |
-----------------------------
| Carl | August | 3 |
| Carl | September | 1 |
| John | July | 3 |
| John | August | 1 |
| Robert| September | 1 |
| Rober | August | 1 |
请参阅此SQL Fiddle。
答案 5 :(得分:0)
count
计算非null
的值-包括零。使用这些if
,您可以使用sum
来模拟count
-您将有效地计算1
s的值:
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,
SUM(*) AS All FROM table
GROUP BY Name
答案 6 :(得分:0)
select date, count(*)
from table1
group by date
应该给您类似
|DATE |Count(*)|
----------------------
|August | 5 |
|July | 3 |
|September | 2 |