欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL聚合函數(shù)的分組排序使用示例

 更新時(shí)間:2022年04月11日 12:37:01   作者:_jym  
這篇文章主要為大家介紹了PostgreSQL聚合函數(shù)的分組排序使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

聚合函數(shù)

用于匯總的函數(shù)。

COUNT

COUNT,計(jì)算表中的行數(shù)(記錄數(shù))。

計(jì)算全部數(shù)據(jù)的行數(shù):

SELECT COUNT(*)
  FROM Product;

NULL之外的數(shù)據(jù)行數(shù):

SELECT COUNT(purchase_price)
  FROM Product;

結(jié)果如下圖。

在這里插入圖片描述

對(duì)于一個(gè)含NULL的表:

將列名作為參數(shù),得到NULL之外的數(shù)據(jù)行數(shù);將星號(hào)作為參數(shù),得到所有數(shù)據(jù)的行數(shù)(包含NULL)。

SUM、AVG

SUM、AVG函數(shù)只能對(duì)數(shù)值類型的列使用。

SUM,求表中的數(shù)值列的數(shù)據(jù)的和。

SELECT SUM(sale_price)
  FROM Product;

purchase_price里面的數(shù)據(jù)有NULL,四則運(yùn)算中存在NULL,結(jié)果也是NULL,但這里面結(jié)果不是NULL。

這是因?yàn)?,聚合函?shù)以列名為參數(shù),計(jì)算的時(shí)候會(huì)排除NULL的數(shù)據(jù)。

SELECT SUM(sale_price), SUM(purchase_price)
  FROM Product;

在這里插入圖片描述

AVG,求表中的數(shù)值列的數(shù)據(jù)的平均值。

SELECT AVG(sale_price)
  FROM Product;

對(duì)于列里面數(shù)據(jù)有NULL的,會(huì)事先去掉NULL再計(jì)算。如AVG(purchase_price),分母是6而不是8。

SELECT AVG(sale_price), AVG(purchase_price)
  FROM Product;

在這里插入圖片描述

MAX、MIN

MAX,求表中任意列數(shù)據(jù)最大值。

MIN,求表中任意列數(shù)據(jù)最小值。

SELECT MAX(sale_price), MIN(purchase_price)
  FROM Product;
SELECT MAX(regist_date), MIN(regist_date)
  FROM Product;

在這里插入圖片描述

聚合函數(shù)+DISTINCT

計(jì)算去除重復(fù)數(shù)據(jù)后的數(shù)據(jù)行數(shù):

DISTINCT要寫(xiě)在括號(hào)中,目的是在計(jì)算行數(shù)前先去重。

SELECT COUNT(DISTINCT product_type)
  FROM Product;

在這里插入圖片描述

所有的聚合函數(shù)的參數(shù)中都可以使用DISTINCT。

下面這個(gè)SUM(DISTINCT sale_price),先把sale_price里面的數(shù)據(jù)去重,然后再求和。

SELECT SUM(sale_price), SUM(DISTINCT sale_price)
  FROM Product;

GROUP BY

對(duì)表分組:前面使用聚合函數(shù),對(duì)表中所有數(shù)據(jù)進(jìn)行匯總處理。

還可以先把表分成幾組,再進(jìn)行匯總處理。

格式:

SELECT <列名1>,<列名2>,...
FROM <表名>
GROUP BY <列名1>,<列名2>,...;

按商品種類統(tǒng)計(jì)數(shù)據(jù):

使用GROUP BY product_type,會(huì)按商品種類對(duì)表切分。

GROUP BY指定的列,稱為聚合鍵、分組列。

SELECT product_type, COUNT(*)
  FROM Product
 GROUP BY product_type;

按商品種類對(duì)表切分,得到以商品種類為分界的三組數(shù)據(jù),然后,計(jì)算每種商品數(shù)據(jù)行數(shù)。

在這里插入圖片描述

如果聚合鍵里面含有NULL,也將NULL作為一組特定數(shù)據(jù)。

SELECT purchase_price, COUNT(*)
  FROM Product
 GROUP BY purchase_price;

在這里插入圖片描述

如果加上WHERE子句,格式如下:

SELECT <列名1>,<列名2>,...
FROM <表名>
WHERE
GROUP BY <列名1>,<列名2>,...;

先根據(jù)WHERE子句指定的條件進(jìn)行篩選,然后再匯總處理。

下面語(yǔ)句的執(zhí)行順序:FROM、WHERE、GROUP BY、SELECT。

SELECT purchase_price, COUNT(*)
  FROM Product
 WHERE product_type = '衣服'
 GROUP BY purchase_price;

在這里插入圖片描述

使用聚合函數(shù)和GROUP BY時(shí)需要注意:

1.SELECT子句中,只能存在三種元素:常數(shù)、聚合函數(shù)、GROPU BY子句指定的列名(聚合鍵)。

使用GROPU BY子句時(shí),SELECT子句中不能出現(xiàn)聚合鍵之外的列名。

2.GROUP BY子句里面不能使用SELECT子句中定義的別名。

這是因?yàn)镾QL語(yǔ)句在DBMS內(nèi)部先執(zhí)行GROUP BY子句,再執(zhí)行SELECT子句。執(zhí)行GROUP BY子句時(shí)候,DBMS還不知道別名代表的是啥,因?yàn)閯e名是在SELECT子句里面定義的。

3.GROUP BY子句執(zhí)行結(jié)果的顯示順序是無(wú)序的。

4.只有SELECT子句、HAVING子句、ORDER BY子句里面能使用聚合函數(shù)。

HAVING

使用GROPU BY子句,得到將表分組后的結(jié)果。

使用HAVING子句,指定分組的條件,從分組后的結(jié)果里面選取特定的組。

格式:

SELECT <列名1>,<列名2>,...
FROM <表名>
WHERE
GROUP BY <列名1>,<列名2>,...;
HAVING <分組結(jié)果對(duì)應(yīng)的條件>

下面這個(gè),選出包含兩行數(shù)據(jù)的組。

SELECT product_type, COUNT(*)
  FROM Product
 GROUP BY product_type
HAVING COUNT(*) = 2;

在這里插入圖片描述

下面這個(gè),選出平均值>=2500的組。

SELECT product_type, AVG(sale_price)
  FROM Product
 GROUP BY product_type
HAVING AVG(sale_price) >= 2500;

在這里插入圖片描述

HAVING子句中,能用的三種元素:常數(shù)、聚合函數(shù)、GROPU BY子句指定的列名(聚合鍵)。

聚合鍵所對(duì)應(yīng)的一些條件,可以寫(xiě)在HAVING子句中,也可寫(xiě)在WHERE子句中。

下面兩段代碼結(jié)果都一樣。

HAVING子句用來(lái)指定組的條件。WHERE子句用來(lái)指定數(shù)據(jù)行的條件。聚合鍵所對(duì)應(yīng)的一些條件還是寫(xiě)在WHERE子句中好點(diǎn)。

SELECT product_type, COUNT(*)
  FROM Product
 GROUP BY product_type
HAVING product_type = '衣服';
SELECT product_type, COUNT(*)
  FROM Product
WHERE product_type = '衣服'
 GROUP BY product_type;

在這里插入圖片描述

ORDER BY

使用ORDER BY子句,可以對(duì)查詢結(jié)果進(jìn)行排序。

格式:

SELECT <列名1>,<列名2>,...
FROM <表名>
ORDER BY <排序基準(zhǔn)列1>,<排序基準(zhǔn)列2>,...;

ORDER BY子句寫(xiě)在SELECT語(yǔ)句末尾。

ORDER BY子句里面的列名稱為排序鍵。

使用升序排列,使用ASC關(guān)鍵字,省略這個(gè)關(guān)鍵字,默認(rèn)也是升序排列。

SELECT product_id, product_name, sale_price, purchase_price
  FROM Product
ORDER BY sale_price;

上面是升序排列,如果想要降序排列,使用DESC關(guān)鍵字。

SELECT product_id, product_name, sale_price, purchase_price
  FROM Product
ORDER BY sale_price DESC;

在這里插入圖片描述

上面的排序,sale_price=500的有兩個(gè)數(shù)據(jù),這兩個(gè)數(shù)據(jù)的順序是隨機(jī)的。

可以再添加一個(gè)排序鍵,對(duì)這兩個(gè)數(shù)據(jù)排序。

下面就實(shí)現(xiàn)了,價(jià)格相同時(shí),按照商品編號(hào)升序排序。

多個(gè)排序鍵時(shí),優(yōu)先使用左邊的鍵,該列存在相同值,再參考右邊的鍵。

SELECT product_id, product_name, sale_price, purchase_price
  FROM Product
ORDER BY sale_price, product_id;

在這里插入圖片描述

如果,排序鍵里面有數(shù)據(jù)是NULL,NULL會(huì)在結(jié)果的開(kāi)頭或結(jié)尾顯示。

SELECT product_id, product_name, sale_price, purchase_price
  FROM Product
ORDER BY purchase_price;

在這里插入圖片描述

ORDER BY子句里面可以使用SELECT子句中定義的別名。

這是由SQL語(yǔ)句在DBMS內(nèi)部執(zhí)行順序決定的。SELECT子句執(zhí)行順序在ORDER BY前,GROPU BY后。

FROM、WHERE、GROPU BY、HAVING、SELECT、ORDER BY

SELECT product_id AS id, product_name, sale_price AS sp, purchase_price
  FROM Product
ORDER BY sp, id;

在這里插入圖片描述

ORDER BY子句可以使用在表里,但不在SELECT子句里的列。

SELECT product_name, sale_price, purchase_price
  FROM Product
ORDER BY product_id;

ORDER BY子句里面可以使用聚合函數(shù)。

SELECT product_type, COUNT(*)
  FROM Product
 GROUP BY product_type
ORDER BY COUNT(*);

以上就是PostgreSQL聚合函數(shù)的分組排序使用示例的詳細(xì)內(nèi)容,更多關(guān)于PostgreSQL聚合函數(shù)分組排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • sqoop讀取postgresql數(shù)據(jù)庫(kù)表格導(dǎo)入到hdfs中的實(shí)現(xiàn)

    sqoop讀取postgresql數(shù)據(jù)庫(kù)表格導(dǎo)入到hdfs中的實(shí)現(xiàn)

    這篇文章主要介紹了sqoop讀取postgresql數(shù)據(jù)庫(kù)表格導(dǎo)入到hdfs中的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • PostgreSQL數(shù)據(jù)庫(kù)中DISTINCT關(guān)鍵字的四種用法詳解

    PostgreSQL數(shù)據(jù)庫(kù)中DISTINCT關(guān)鍵字的四種用法詳解

    PostgreSQL 不但高度兼容 SQL 標(biāo)準(zhǔn),同時(shí)還對(duì)很多語(yǔ)法進(jìn)行了擴(kuò)展,可以用于實(shí)現(xiàn)一些特殊的功能,今天我們就來(lái)介紹一下 PostgreSQL 數(shù)據(jù)庫(kù)中 DISTINCT 關(guān)鍵字的 4 種不同用法,需要的朋友可以參考下
    2024-04-04
  • PostgreSql從庫(kù)重新配置的詳情

    PostgreSql從庫(kù)重新配置的詳情

    這篇文章主要介紹了PostgreSql從庫(kù)重新配置的詳情,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作

    postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作

    這篇文章主要介紹了postgresql連續(xù)歸檔及時(shí)間點(diǎn)恢復(fù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL TIMESTAMP類型 時(shí)間戳操作

    PostgreSQL TIMESTAMP類型 時(shí)間戳操作

    這篇文章主要介紹了PostgreSQL TIMESTAMP類型 時(shí)間戳操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Ubuntu中卸載Postgresql出錯(cuò)的解決方法

    Ubuntu中卸載Postgresql出錯(cuò)的解決方法

    這篇文章主要給大家介紹了關(guān)于在Ubuntu中卸載Postgresql出錯(cuò)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • 基于PostgreSQL pg_hba.conf 配置參數(shù)的使用說(shuō)明

    基于PostgreSQL pg_hba.conf 配置參數(shù)的使用說(shuō)明

    這篇文章主要介紹了基于PostgreSQL pg_hba.conf 配置參數(shù)的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 在PostgreSQL中實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)的關(guān)聯(lián)查詢

    在PostgreSQL中實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)的關(guān)聯(lián)查詢

    在 PostgreSQL 中,通常情況下的關(guān)聯(lián)查詢是在同一個(gè)數(shù)據(jù)庫(kù)的不同表之間進(jìn)行的,然而,在某些復(fù)雜的應(yīng)用場(chǎng)景中,可能需要實(shí)現(xiàn)跨數(shù)據(jù)庫(kù)的關(guān)聯(lián)查詢,本文將詳細(xì)探討如何在 PostgreSQL 中實(shí)現(xiàn)這一需求,并通過(guò)示例代碼進(jìn)行說(shuō)明,需要的朋友可以參考下
    2024-08-08
  • Docker修改Postgresql密碼的方法詳解

    Docker修改Postgresql密碼的方法詳解

    在Docker環(huán)境中,對(duì)已運(yùn)行的PostgreSQL數(shù)據(jù)庫(kù)實(shí)例進(jìn)行密碼更改是一項(xiàng)常見(jiàn)的維護(hù)操作,下面將詳述如何通過(guò)一系列命令行操作來(lái)實(shí)現(xiàn)這一目標(biāo),需要的朋友可以參考下
    2024-07-07
  • PostgreSQL教程(三):表的繼承和分區(qū)表詳解

    PostgreSQL教程(三):表的繼承和分區(qū)表詳解

    這篇文章主要介紹了PostgreSQL教程(三):表的繼承和分區(qū)表詳解,本文講解了多表繼承、 繼承和權(quán)限、什么是分區(qū)表、分區(qū)表實(shí)現(xiàn)、分區(qū)和約束排除等內(nèi)容,需要的朋友可以參考下
    2015-05-05

最新評(píng)論