mysql 统计数量,mysql分类统计数量

比如我表test里面有id,mc,xh三个字段(分别是自动编号,钢材名称(若干种),钢材型号(大号,中号,小号))

id mc xh

1 钢管 大号

2 铜管 大号

3 铁管 小号

4 铝管 中号

5 钢管 小号

我现在要分别统计出“mc”里面的各种型号的东西有多少。意思是:

我要统计钢管,铜管,铁管,铝管的大,中,小号各有多少条记录。

并且mc里面的是不固定的,可能还有金管,还有熟料管什么的,,但是xh里面只有三种情况,那就是大号,中号,小号:

1.在mysql中建立一个测试数据表

CREATE TABLE `tb_test_count` (

`id` bigint(20) NOT NULL,

`mc` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,

`xh` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2.插入一批数据

INSERT INTO tb_test_count VALUES(1,'钢管','大号');

INSERT INTO tb_test_count VALUES(2,'铜管','大号');

INSERT INTO tb_test_count VALUES(3,'铁管','小号');

INSERT INTO tb_test_count VALUES(4,'铝管','大号');

INSERT INTO tb_test_count VALUES(5,'铝管','小号');

INSERT INTO tb_test_count VALUES(6,'钢管','大号');

INSERT INTO tb_test_count VALUES(7,'钢管','小号');

3.查询统计的SQL语句

select mc,count(case when xh='大号' then 1 end) as 大号,

count(case when xh='中号' then 1 end) as 中号,

count(case when xh='小号' then 1 end) as 小号

from tb_test_count

group by mc

4.查询结果如下

503e0638a8e7

image.png

5.在限定条件下分类查询

如,限定入厂时间内的分类查询;

5.1增加一个入厂时间字段time

503e0638a8e7

image.png

5.2查询1月份统计的SQL语句

select mc,count(case when xh='大号' then 1 end) as 大号,

count(case when xh='中号' then 1 end) as 中号,

count(case when xh='小号' then 1 end) as 小号

from (select * FROM tb_test_count where time "2020-12-31")tb1

group by mc

5.3 查询结果如下

503e0638a8e7

image.png