mysql> set names utf8; mysql> SELECT * FROM employee_tbl; +----+--------+---------------------+--------+ | id | name | date | singin | +----+--------+---------------------+--------+ | 1 | 小明 | 2016-04-22 15:25:33 | 1 | | 2 | 小王 | 2016-04-20 15:25:47 | 3 | | 3 | 小丽 | 2016-04-19 15:26:02 | 2 | | 4 | 小王 | 2016-04-07 15:26:14 | 4 | | 5 | 小明 | 2016-04-11 15:26:40 | 4 | | 6 | 小明 | 2016-04-04 15:26:54 | 2 | +----+--------+---------------------+--------+ 6 rows in set (0.00 sec)
一、简单分类统计
mysql> SELECT name, COUNT(*) FROM employee_tbl GROUP BY name; +--------+----------+ | name | COUNT(*) | +--------+----------+ | 小丽 | 1 | | 小明 | 3 | | 小王 | 2 | +--------+----------+ 3 rows in set (0.01 sec)
SELECT `status`,ROUND(count(*)/2)
from mt_cc_stock_status_info
GROUP BY `status`
二、分类基础上统计
使用 WITH ROLLUP
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
例如我们将以上的数据表按名字进行分组,再统计每个人登录的次数:
mysql> SELECT name, SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP; +--------+--------------+ | name | singin_count | +--------+--------------+ | 小丽 | 2 | | 小明 | 7 | | 小王 | 7 | | NULL | 16 | +--------+--------------+ 4 rows in set (0.00 sec)
其中记录 NULL 表示所有人的登录次数。
1、我们可以使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:
select coalesce(a,b,c);
参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
以下实例中如果名字为空我们使用总数代替:
mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY name WITH ROLLUP; +--------------------------+--------------+ | coalesce(name, '总数') | singin_count | +--------------------------+--------------+ | 小丽 | 2 | | 小明 | 7 | | 小王 | 7 | | 总数 | 16 | +--------------------------+--------------+ 4 rows in set (0.01 sec)
2、
三、按条件统计
mysql如何分类统计数量 - 魔流剑 - 博客园
https://www.cnblogs.com/lr393993507/p/9791907.html
SELECT
SUM(case when relat.`status`=0 then 1 else 0 end) as 状态0,
SUM(case when relat.`status`=1 then 1 else 0 end) as 状态1,
SUM(case when relat.`status`=2 then 1 else 0 end) as 状态2,
SUM(case when relat.`status`=3 then 1 else 0 end) as 状态3 ,
SUM(case when relat.`status`=4 then 1 else 0 end) as 状态4
FROM mt_cc_warehous_rank rank
LEFT JOIN mt_cc_warehous_position position ON rank.id=position.warehous_rank_id
LEFT JOIN mt_cc_warehous_position_relat relat ON position.id=relat.warehous_position_id
where rank.`status`=0 AND position.id<10