单个查询中的不同计数

9wbgstp7  于 2021-06-21  发布在  Mysql
关注(0)|答案(7)|浏览(284)

我有一张这样的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

我尝试了这个查询,但是​​都是一样的

kcugc4gi

kcugc4gi1#

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;

参考文献:https://stackoverflow.com/a/13075582/1688441

mrwjdhj3

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

13z8s7eq

13z8s7eq3#

发生这种情况的原因很简单: 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。不需要 Package IF() 周围的人也做同样的事。

j2datikz

j2datikz4#

select date, count(*) 
from table1
group by date

应该给你一些

|DATE       |Count(*)|
----------------------
|August     |    5   |
|July       |    3   |
|September  |    2   |

http://sqlfiddle.com/#!9/c0a483/2号机组

ki1q1bka

ki1q1bka5#

最简单的方法就是试试这个。带bool(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
xbp102n0

xbp102n06#

count 计算不存在的值 null -包括零。带着那些 if s、 你可以使用 sum 模仿 count -您将有效地计算 1 学生:

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
mu0hgdu0

mu0hgdu07#

尝试 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   |

看看这把小提琴。

相关问题