91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL語句中分組函數與聚合函數有哪些

發布時間:2020-12-01 16:19:08 來源:億速云 閱讀:946 作者:Leah 欄目:開發技術

SQL語句中分組函數與聚合函數有哪些?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1 分組聚合的原因

SQL中分組函數和聚合函數之前的文章已經介紹過,單說這兩個函數有可能比較好理解,分組函數就是group by,聚合函數就是COUNT、MAX、MIN、AVG、SUM。

SQL語句中分組函數與聚合函數有哪些

拿上圖中的數據進行解釋,假設按照product_type這個字段進行分組,分組之后結果如下圖。

SELECT product_type from productgroup by product_type

SQL語句中分組函數與聚合函數有哪些

從圖中可以看出被分為了三組,分別為廚房用具、衣服和辦公用品,就相當于對product_type這個字段進行了去重,確實group by函數有去重的作用。

SELECT DISTINCT product_type from product

假設分組之后,我想看一下價格,也就是sale_price這個字段的值,按照如下這個寫法,會報如下錯誤。

SELECT product_type,sale_price from productgroup by product_type

SQL語句中分組函數與聚合函數有哪些

這是為什么呢?原表按照product_type分組之后,廚房用具對應4個值,衣服對應2個值,辦公用品對應2個值,這就是在取sale_price這個字段的時候為什么報錯了,一個空格中不能填入多個值,這時候就可以用聚合函數了,比如求和,求平均,求最大最小值,求行數。聚合之后的值就只有一個值了。

SQL語句中分組函數與聚合函數有哪些

SELECT product_type,sum(sale_price),avg(sale_price),count(sale_price),max(sale_price) from productgroup by product_type

SQL語句中分組函數與聚合函數有哪些

對于多個字段的分組,其原理是一樣的。從上述中記住兩點:分組去重和分組聚合。

2 distinct和group by去重的區別 Distinct 和group by 設計時側重點不一樣

distinct只是為了去重,而group by是為了聚合統計的。

兩者都有去重的效果,但是執行的效率不一樣

單個字段去重

--DISTINCTSELECT distinct product_type from product--GROUP BYselect product_type from productGROUP BY product_type

SQL語句中分組函數與聚合函數有哪些

多個字段去重

--DISTINCTSELECT distinct product_name, product_type from product--GROUP BYselect product_name, product_type from productGROUP BY product_name, product_type

SQL語句中分組函數與聚合函數有哪些

執行效率

select <列名1>,<列名2>from<表名>where 查詢條件group by 分組類別having 對分組結果指定條件order by <列名> (desc)limit 數字

SQL語句中分組函數與聚合函數有哪些

SQL語言的運行順序,先執行上圖中的第一步,然后再執行select子句,最后對結果進行篩選。distinct是在select子句中,而group by在第一步中,所以group by去重比distinct去重在效率上要高。

sql中聚合函數和分組函數_SQL選擇計數聚合函數-語法示例解釋

sql中聚合函數和分組函數

The COUNT operator is usually used in combination with a GROUP BY clause. It is one of the SQL “aggregate” functions, which include AVG (average) and SUM.

COUNT運算符通常與GROUP BY子句結合使用。 它是SQL“聚合”功能之一,其中包括AVG(平均)和SUM。

This function will count the number of rows and return that count as a column in the result set.

此函數將對行數進行計數,并將該計數作為列返回到結果集中。

Here are examples of what you would use COUNT for:

以下是將COUNT用于以下用途的示例:

Counting all rows in a table (no group by required)
計算表中的所有行(不需要按組)
Counting the totals of subsets of data (requires a Group By section of the statement)
計算數據子集的總數(需要語句的“分組依據”部分)
For reference, here is the current data for all the rows in our example student database.

作為參考,這是示例學生數據庫中所有行的當前數據。

select studentID, FullName, programOfStudy, sat_score from student; -- all records with fields of interest
This SQL statement provides a count of all rows. Note that you can give the resulting COUNT column a name using “AS”.

該SQL語句提供所有行的計數。 請注意,您可以使用“ AS”為所得的COUNT列命名。

select count(*) AS studentCount from student; -- count of all records

Here we get a count of students in each field of study.

在這里,我們得到了每個學習領域的學生人數。

select studentID, FullName, count(*) AS studentCount from the student table with a group by programOfStudy;

Here we get a count of students with the same SAT scores.

在這里,我們得到了具有相同SAT分數的學生人數。

select studentID, FullName, count(*) AS studentCount from the student table with a group by sat_score;

Here is an example using the campaign funds table. This is a sum total of the dollars in each transaction and the number of contributions for each political party during the 2016 US Presidential Campaign.

這是使用廣告系列資金表的示例。 這是2016年美國總統大選期間每筆交易的總金額和每個政黨的捐款額。

select Specific_Party, Election_Year, format(sum(Total_$),2) AS contribution$Total, count(*) AS numberOfContributions 
from combined_party_data
group by Specific_Party,Election_Year
having Election_Year = 2021;

As with all of these things there is much more to it, so please see the manual for your database manager and have fun trying different tests yourself.

關于所有這些事情,還有很多事情要做,所以請參閱數據庫管理員手冊,并嘗試自己進行不同的測試,這很有趣。

sql語句聚合函數和分組操作的注意事項

group by可以根據給定數據列的每個成員對查詢結果進行分組統計,最終得到一個匯總表。

group by幾個比較重要的約束:

(1)select字句中的列名和having或where中的列名必須為分組列或列函數.列函數對于group by字句定義的每個組返回一個結果
(2)group by一般和聚合函數一使用才有意義,比如count,sum,avg等,使用group by 的兩個要素:
(3)出現在select后面的字段,要么是聚合函數中的,要么是group by中的.
(4)要篩選結果,可以先使用where再用group by或者先用group by再用having

第(4)項根據各個數據庫不同不一定都能適用,因此最好不要這樣用,老老實實用having

SQL聚合函數和分組數據語法及概述

(一)聚合函數是指對列上的數據進行操作,起到統計的作用。前面的函數都是最一行記錄進行操作得到的數據,包括前面的日期函數、數學函數、字符函數、轉換函數以及條件判斷函數。

常用的聚合函數有:count、sum、avg、max、min。這5個函數個起到統計記錄數、求和、求平均值、求最大值、最小值的作用。

Count:count函數對查詢的數據統計記錄數量,這個函數不對字段值為NULL的值進行統計,也就是說某個查詢的字段有NULL值,則NULL值的數量會被減除,這樣就可以不對NULL設置查詢條件了。
如果要對NULL值設置查詢,則可以用WHERE 字段 IS NULL來作為條件。
Sum:sum函數求和,只能對數值型數據操作,也會忽略NULL值。舉例:
Select sum(考試成績) as 計算機總成績
From score
Where 課號 in (select 課號 from course where 課名=”計算機”)
Avg:求平均值,參數也必須為數值型字段名或者結果為數值的表達式。
Max、min:這兩個函數求最大值和最小值,但是不能放到WHERER中以及SELECT子句的字段名位置上。
例:select max(x1) from y where max(x2) in(select…) 錯誤的語法。
Select x1 from y where x2=max(x3) 錯誤的語法。
select max(x1) from y where x2) in(select max(x2,)…) 正確。
注:5個函數都可以使用distinct統計不重復的值:
Select count(distinct(課程)) as 課程數量 from 課程表
Access和mysql不能將distinct放置到參數中,解決方法:查詢distinct保存為新表INTO語句,然后再使用count。

(二)數據分組是指將數據表中的數據按照指定字段的不同值分為很多組,使用group by 子句進行操作。

Group by通常不直接查詢所有字段并且分組,group by和select后分組字段和查詢字段通常一致。因為select * from y group by x 會產生錯誤,通常對某個字段分組并且利用聚合函數計算分組得到的值。
聚合函數和分組的組合并設置查詢條件:可以對一個字段分組并且設定條件,這樣得到的結果將會是計算分組并且滿足條件的值。例:
查詢各個所屬院系中所有男生的值:
Select 所屬院系,count(*) as 男生人數from student where 性別='男' group by 所屬院系
查詢直方圖:利用replicate()函數,將分組得到的數據作為次數,重復一個設置的符號。
排序查詢結果:order by語句,ASC、DESC 位于group by之后
Case表達式和group by的結合:
Select 所屬院系,count(case
When 性別='男' then 1
Else null
End ) as 男生人數,
count(case
When 性別='女' then 1
Else null
End ) as 女生人數
From student group by 所屬院系
Hanving子句設置分組group by的分組查詢條件。
Having子句總是和group by子句結合使用,依賴于分組,可以在having中使用聚合函數;where 也可以設定條件,但是不依賴于分組的字段,但是不能使用聚合函數。
Select 學號,sum(考試成績) as 考試總成績 from score group by 學號 having sum(考試成績)>400 order by 考試總成績 desc

關于SQL語句中分組函數與聚合函數有哪些問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃江县| 义乌市| 铜山县| 固安县| 泽普县| 乌兰浩特市| 旺苍县| 永昌县| 内乡县| 潜江市| 名山县| 麟游县| 伊通| 青河县| 文安县| 米脂县| 华宁县| 昭觉县| 津市市| 天长市| 韶山市| 兰坪| 华宁县| 清镇市| 呼伦贝尔市| 白水县| 苏州市| 丰县| 民乐县| 济源市| 万州区| 深泽县| 澳门| 黄石市| 察哈| 阿拉善盟| 卢氏县| 西平县| 福清市| 大冶市| 东山县|