不常见的 SQL
窗口函数
OVER
OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
在这里要引入窗口函数和开窗函数的概念:
1 |
|
- SUM(Salary) OVER (PARTITION BY Groupname)
- 只对PARTITION BY后面的列Groupname进行分组,分组后求解Salary的和。
- SUM(Salary) OVER (PARTITION BY Groupname ORDER BY ID)
- 对PARTITION BY后面的列Groupname进行分组,然后按ORDER BY 后的ID进行排序,然后在组内对Salary进行累加处理。
- SUM(Salary) OVER (ORDER BY ID)
- 只对ORDER BY 后的ID内容进行排序,对排完序后的Salary进行累加处理。
- SUM(Salary) OVER ()
- 对Salary进行汇总处理
这里的主标题就是开窗函数。
比较容易出错而且难以理解的是:COUNT(DISTINCT wuid) AS unique_wuid_count, SUM(COUNT(DISTINCT wuid)) OVER() AS total_unique_wuid_count from
这样的设计,左列的累积和不一定等于右边的值,这样的bug比较难调试处理。
选出通话时间最早的一条记录:
1 |
|
case when
嵌套 case when
在select 的一个目标列里:
1 |
|
缺列的时候mock一列
select “mock_id”, taskid from abc;
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.