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

被折叠的 条评论
为什么被折叠?



