sql:常用:group by 多個欄位
首先group by 的簡單說明:
group by 一般和聚合函式一起使用才有意義,比如 count sum avg等,使用group by的兩個要素:
(1) 出現在select後面的欄位 要麼是是聚合函式中的,要麼就是group by 中的.
(2) 要篩選結果 可以先使用where 再用group by 或者先用group by 再用having
下面看下 group by多個條件的分析:
在SQL查詢器輸入以下語句
create table test
(
a varchar(20),
b varchar(20),
c varchar(20)
)
insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','甲')
insert into test values(1,'a','乙')
insert into test values(1,'b','乙')
insert into test values(1,'b','乙')
insert into test values(1,'b','乙')
第一次查詢
select * from test; 結果如下圖:
結果中 按照b列來分:則是 5個a 3個b.
按照c列來分:則是 4個甲 4個乙.
第二次 按照 b列來分組 程式碼如下
select count(a),b from test group by b (可以想想把b列作為類似key主鍵,讓它唯一,看看分幾組)
第三次 按照 c列來分組 程式碼如下
select count(a),c from test group by c(可以想想把c列作為類似key主鍵,讓它唯一,看看分幾組)
第四次 按照 b c兩個條件來分組
select count(a),b,c from test group by b,c (可以想想把b和c列一起作為類似key主鍵,讓它唯一,看看分幾組)
第五次 按照 c b 順序分組
select count(a),b,c from test group by c,b (可以想想把c和b列一起作為類似key主鍵,讓它唯一,看看分幾組)
可以看出 group by 兩個條件的工作過程:
先對第一個條件b列的值 進行分組,分為 第一組:1-5, 第二組6-8,
然後又對已經存在的兩個分組用條件二 c列的值進行分組,發現第一組又可以分為兩組 1-4,5
第四次和第五次查詢結果的區別:
按照 b c兩個條件來分組,先對第一個條件b列的值 進行分組,分為 第一組:1-5, 第二組6-8,
然後又對已經存在的兩個分組用條件二 c列的值進行分組,發現第一組又可以分為兩組 1-4,5。
按照 c b兩個條件來分組,先對第一個條件c列的值 進行分組,分為 第一組:1-4, 第二組5-8,
然後又對已經存在的兩個分組用條件二 b列的值進行分組,發現第二組又可以分為兩組 5, 6-8。