select 1 from.../partition by 1等語句中的1的含義
阿新 • • 發佈:2020-12-09
用處一
- 直觀作用:臨時增加列,列中的所有值使用1填充(當人使用其他值也可以)
- select 1 from table;與select anycol(目的表集合中的任意一列) from table;與select * from table 從作用上來說是沒有差別的,都是檢視是否有記錄,一般是作條件查詢用的。select 1 from 中的1是一常量(可以為任意數值),查到的所有行的值都是它,但從效率上來說,1>anycol>,因為不用查字典表。
- 例項測試
-
table表是一個數據表,假設表的行數為10行。
-
1:select 1 from table 增加臨時列,臨時列中的每行資料是寫在select後的數(這條sql語句中是1)
-
2:select count(1) from table 管count(a)的a值如何變化,得出的值總是table表的行數
-
3:select sum(1) from table 計算臨時列的和
-
用處二
- 在 … over (partition by 1)中表示建立臨時列且值為1,此時1的含義是整個列表維度,作用是在整個列表(全域性)維度上進行聚合(彙總所有資料),尤其是與group by 一起使用,表示在group by的聚合基礎上在基於 partition by 指定的維度再次聚合。如以下例子:
select * from stu
select
class,
sum(score) 班級總分,
sum(sum(score)) over(partition by 1) 年級總分,
cast(cast(sum(score)*100/nullif(sum(sum(score)) over(partition by 1),0) as numeric(18,2)) as varchar(50))+'%' as 班級總分佔比
from stu
group by class
可以看出 patition by 在group by分組彙總的前提下,再彙總一次
- 參考連結
https://blog.csdn.net/bibibrave/article/details/82961201
https://www.cnblogs.com/huangchuxian/p/7808051.html