iT邦幫忙

3

趣味SQL又來了 GREATEST LEAST 介紹 及 找出最大銷售量之月份問題

  • 分享至 

  • xImage

ANSI SQL 2023 引進了 GREATEST LEAST. 在PostgreSQL 已經支援了很多年了.
與 MAX, MIN 兩個聚合函數不同.先來看一下

create schema s0118;

create table s0118.t0118a (
  id int primary key
, player text
, val1 int
, val2 int
, val3 int
);

insert into s0118.t0118a values
(1, '小帥', 10, 20, 30),
(2, '大壯', 9, 8, 7);

select id, player
     , greatest(val1, val2, val3)
     , least(val1, val2, val3)
  from s0118.t0118a;

 id | player | greatest | least
----+--------+----------+-------
  1 | 小帥   |       30 |    10
  2 | 大壯   |        9 |     7
(2 rows)

可以看到不是針對多筆資料中單一欄位計算,可以是多運算式(欄位可以是運算式的組成).
可以用在如查詢,Procedure Function 的運算式,等等.
也可以用來比較日期.

select greatest(date '2023-01-01', date '2023-01-18')
     , least(date '2023-01-01', date '2023-01-18');

  greatest  |   least
------------+------------
 2023-01-18 | 2023-01-01

對null 的處理.與一般SQL標準函數不同.

SELECT GREATEST(0,NULL), LEAST(0,NULL);
 greatest | least
----------+-------
        0 |     0

不因NULL的參與,而回傳NULL.

以前有使用的例子

這裡有個月銷售額的例子:按我前往

測試的table與資料,我是用SQL產生SQL來產生的.
為了大家方便,我就用dump出來的 insert 格式.

這種類型的資料,原始數據是 gal, 日期或時間, 銷售 ==聚合=> gal, 月, 月銷售 ==直轉橫=> gal, 1月,2月.....

但是有時候,我們無法取得原始數據,只有整理好的直轉橫資料了.
這時候雖然有 greatest 可以方便取得最大銷售額,但是是幾月呢?

我有做了一點測試,有興趣研究看看的朋友,可以試試看.

https://ithelp.ithome.com.tw/upload/images/20240118/20050647PUZhaUE0ir.png

我有寫了篇分享
https://hackmd.io/@pgsql-tw/rJoZic3Fp
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答