select 1 from.../partition by 1等语句中的1的含义

本文探讨了在SQL查询中使用1作为选择列的效率和用途。首先,`SELECT 1 FROM table`用于快速检查表中是否有记录,而`SELECT COUNT(1) FROM table`返回表的行数。此外,`SELECT SUM(1) FROM table`计算临时列的总和。其次,`OVER(PARTITION BY 1)`在聚合函数中表示全局聚合,用于在所有数据上进行计算,特别是在与GROUP BY结合使用时,提供额外的分组聚合层。关键词涉及SQL查询、数据库效率和聚合函数的使用。

用处一

  • 直观作用:临时增加列,列中的所有值使用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.youkuaiyun.com/bibibrave/article/details/82961201
    https://www.cnblogs.com/huangchuxian/p/7808051.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值