SQL高级语法

聚合函数

SELECT vendor_id, AVG(price) AS avg_price FROM Products WHERE price >= 50GROUP BY vendor_id HAVING AVG(price) > 100 ORDER BY avg_price DESC;

PARTITION OVER用于在分区内进行计算。它可以在每个分区内对数据进行排序、聚合、分组等操作。

SELECT id, name, age, salary, AVG(salary) OVER (PARTITION BY age) AS avg_salary FROM employees;根据age列对employees表进行分区。然后,使用AVG()函数计算每个分区内的平均工资ROW_NUMBER()用于为每一行分配一个唯一的序号。它通常与PARTITION BY一起使用,以便在每个分区内为行编号。

SELECT id, name, age, salary, ROW_NUMBER() OVER (PARTITION BY age ORDER BY salary DESC) AS row_num FROM employees;在上面的例子中,根据age列对employees表进行分区。然后,使用ROW_NUMBER()函数为每个分区内的行分配一个唯一的序号,按照salary列的降序进行排序。RANK用于为每一行分配一个排名。它可以根据指定的排序规则,为每个分区内的行进行排名。

SELECT id, name, age, salary, RANK() OVER (PARTITION BY age ORDER BY salary DESC) AS rank FROM employees;根据age列对employees表进行分区。然后,使用RANK()函数为每个分区内的行分配一个排名,按照salary列的降序进行排序。DENSE_RANK与RANK()类似,但它不会跳过排名。即如果有两个行具有相同的排序值,则它们将被分配相同的排名。

SELECT id, name, age, salary, DENSE_RANK() OVER (PARTITION BY age ORDER BY salary DESC) AS dense_rank FROM employees;根据age列对employees表进行分区。然后,使用DENSE_RANK()函数为每个分区内的行分配一个排名,按照salary列的降序进行排序NTILE用于将数据分成指定数量的桶或分区。它可以将数据均匀分布到每个分区中。

SELECT id, name, age, salary, NTILE(4) OVER (ORDER BY salary DESC) AS ntile FROM employees;将employees表的数据分成4个分区,按照salary列的降序进行分区。然后,使用NTILE()函数为每个分区分配一个编号

相关推荐
wangyue49 分钟前
MYSQL 乐观锁
数据库·mysql
踩着阴暗的自己向上爬20 分钟前
Day01-postgresql数据库基础入门培训
数据库·postgresql
Wang's Blog39 分钟前
Redis: 集群架构,优缺点和数据分区方式和算法
数据库·redis·架构
fishmemory7sec1 小时前
Koa2+mongodb项目实战1(项目搭建)
数据库·mongodb·koa
kingapex11 小时前
性能优化-数据库分区技术深入解析
数据库·oracle·性能优化·数据库设计
mariokkm1 小时前
Django一分钟:使用prefetch_related避免陷入大量的查询中导致严重的性能问题
数据库·django·sqlite
Satan7121 小时前
【MySQL】SQL介绍+基础+DDL+数据备份+还原
数据库·sql·mysql
技术卷2 小时前
Redis数据库与GO(二):list,set
数据库·redis·golang
2402_857583492 小时前
春意融融:Spring Boot技术在“衣依”服装销售平台的应用
java·开发语言·数据库
huisheng_qaq3 小时前
【redis-05】redis保证和mysql数据一致性
数据库·redis·mysql·分布式锁·延迟双删·数据一致性