當前位置:
首頁 > 知識 > MySQL資料庫查詢之聚合查詢

MySQL資料庫查詢之聚合查詢

好的寶寶們

今天我們來分享

聚合查詢

首先對我們上次分享的表單查詢

進行一些補充

關鍵字

distinct

去重,在結果中去除重複的行。

語法:

select distinct column_names from 表名;

我打開的是一個訂單詳情表

作用於單列:

select distinct(order_id) from order_detail where id

我們看一下效果

作用於多列:

select distinct order_id, buy_number from order_detail where id

看來只有一條是重複的

count

統計數量!

select count(id) from order_detail;

統計表中有多少條記錄

select count(distinct(order_id)) from order_detail;

去掉重複的內容進行統計

concat(str1, str2, ...)

連接函數,可以聯合多列,構成一個總的字元串。

select contact(order_id, "-", product_id) from order_detail where id

concat_ws(separator, str1, str2, ...);

第一個參數(separator)是其他參數的分隔符。

select concat_ws("-", order_id, product_id) from order_detail where id

註:mysql 的 concat 函數在連接字元的時候,只要其中有某一個欄位為 null,那麼則整個返回 null.

聚合查詢

group by

分組查詢,對結果進行分組。通過 group by 子句可以將數據劃分到不同的組裡,實現對記錄的分組查詢。

語法:

select column_name, aggregate_function(column_name) from table_name

where condition group by column_name;

我們來打開員工表

看到了我們的表中存在一個 office_id

我們打開這個 office 表看一下

每個office_id代表著一個公司

select * from employee group by office_id;

這樣我們就把員工按照公司分成了不同的組

單獨使用 group by 時,沒什麼實際意義!在與 avg() , sum(), count() 聚合函數一起使用時,作用最大。

聚合函數

聚合函數的最大特點是它們根據一組數據求出一個值。

聚合函數的結果值只根據選定行中非null的值進行計算,null被忽略。

count()

統計個數

select count(employee_id), office_id from employee group by office_id;

這樣就統計出了公司的員工的數量了

select count(employee_id),gender from employee group by gender;

我們還可以統計公司男女員工的數量!

max()

求表中某個欄位最大值(數值類型)

select max(price) from order_detail;

在所有訂單中單價最高的商品!

select max(price),order_id from order_detail where id>1800 group by order_id;

這句語句的意思是我們把所有的訂單按照訂單號進行分組

然後取每組訂單中單價最大的那一條

我們來查看一下一號訂單

在一號訂單中 單價最大的就是這個了!

min()

求表中某個欄位最小值

select min(price) from order_detail;

單價最小的商品

select min(price),order_id from order_detail group by order_id;

sum()

求表中某個欄位的總和

select sum(total_money),order_id from order_detail where id > 1800 group by order_id;

我們就可以看到我們訂單的總金額了

我們來一個複雜的

select sum(total_money) as nu, order_id from order_detail group by order_id order by nu desc limit 10;

這樣我們就取出了所有訂單中總價前十的訂單號和他們的金額!

avg()

求表中某個欄位平均值

select avg(total_money),order_id from order_detail group by order_id;

select avg(total_money) as nu, order_id from order_detail group by order_id order by nu desc limit 10;

having 和 where 的區別?

我們都知道 having 和 where 都可以用來篩選數據

「Where」 是一個約束聲明,Where 是在結果返回之前起作用的, where 子句在聚合前先篩選記錄.也就是說作用在 group by 子句和 having 子句前

「Having」是一個過濾聲明,是在查詢返回結果集以後對查詢結果進行的過濾操作,在Having 中可以使用聚合函數。

select count(employee_id), office_id from employee group by office_id;

select count(employee_id), office_id from employee group by office_id having count(employee_id) > 10;

我們可以利用 having 篩選員工數大於10個的公司的 ID 但是不能使用 where 來篩選

因為原表中沒有 count(employee——id)這個欄位


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

思維導圖學習法如何快速看一本書!

TAG:java學習吧 |