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()函数为每个分区分配一个编号

相关推荐
Zan8 小时前
SQLite + SQLx 实战:为什么已经发布的数据库迁移文件,绝对不能再修改?
数据库·后端·面试
这个DBA有点耶9 小时前
数据同步的三个工程底线:DDL同步、断点续传、一致性校验——开源CDC的边界与KFS的路径
数据库·dba·代码规范
SelectDB10 小时前
列式存储为什么适合分析类负载?原理、限制与日志场景应用
数据库
数据库小学妹10 小时前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
爱吃奥利奥_wen11 小时前
SQL Server 基础语法详解:从建库建表到约束与增删改查
服务器·数据库·oracle
这个DBA有点耶12 小时前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范
测试界的小码农13 小时前
【图数据库实战进阶(01):从零认识 Neo4j,搭建第一个图数据库项目】
数据库·neo4j
x_SpiderMan13 小时前
搭建Oracle RAC 集群
数据库·oracle
测试界的小码农13 小时前
【图数据库实战进阶(03):Neo4j 图数据建模实战——节点、关系与属性应该怎么设计?】
数据库·oracle·neo4j