1. 程式人生 > 其它 >select 1 from.../partition by 1等語句中的1的含義

select 1 from.../partition by 1等語句中的1的含義

技術標籤:hive/sqlmysql大資料

用處一

  • 直觀作用:臨時增加列,列中的所有值使用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