mysql如何分類統計數量
阿新 • • 發佈:2018-11-12
比如我表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.查詢結果截圖如下:
5.如果使用sum方法查詢則(當資料一條都不存在的時候查詢出來的結果是null)
select mc,sum(case when xh='大號' then 1 end) as 大號, sum(case when xh='中號' then 1 end) as 中號, sum(case when xh='小號' then 1 end) as 小號 from tb_test_count group by mc
當一個表中需要統計某個欄位中不同型別的資料條數的時候,可以使用該方法。