1. 程式人生 > >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.查詢結果截圖如下:

 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

 

 

當一個表中需要統計某個欄位中不同型別的資料條數的時候,可以使用該方法。