PL/pgSQL初学之路(二)
2021/10/29 19:12:56
本文主要是介绍PL/pgSQL初学之路(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
参考资料:有序聚集函数
本文接着上文继续介绍postgreSQL中常见的语法和概念,部分概念参考上述链接,佐以自己实操示例,侵删。
涉及到的内容:交互式分析、有序聚集函数、mode() within group (order by col1)、sum(col3) over (partition by col1 order by col2)、sum(col3) over (partition by col1, col2)
交互式分析(mode()函数)
- 概念:
交互式分析(Hologres)兼容PostgreSQL,使用标准的PostgreSQL语法开发。
当前Hologres版本支持的函数时PostgreSQL的一个子集,已支持的有序聚集函数列表如下:
- 示例
select mode() within group (order by altitude), mode() within group (order by longitude) from data_info;
功能:从data_info表中分别取出出现频率最多的纬度和经度数据。
结果:
对上述代码稍作修改:
select mountain_name, mode() within group (order by altitude) as m_altitude, mode() within group (order by longitude) as m_longitude, from data_info group by moutain_name;
功能:跟上述功能类似,不过每个mountain_name都只取一条数据,而mode()统计的也只是每个相同的mountain_name下出现最频繁的经纬度的数据。
运行结果:
注意:在使用mode() within函数时,每次select只有两种选择:
(1)只有mode()函数:则会对整表的该列做统计分析,得出频率最高数据。
(2)有其它字段,也有mode()函数:所有单独的字段都必须要在group by 中有所体现,返回所有其它字段都相同时该列频率最高数据。
否则,将会有类似以下内容报错:
data_info.mountain_name must appear in the GROUP BY clause or be used in an aggregate function.
sum(col3) over (partition by col1 order by col2)
over (partition by col1 order by col2)
- 概念:
此函数在上篇初学之路(一)已经有所提及,当时是结合row_number()函数进行讲解,但讲解的不够透彻,这里讲结合sum函数来更加深入讲解。 - 功能:
表示根据col1分组,在分组内部根据col2排序。
与sum()结合后的partition函数
- sum()
sum()函数在SQL中就是对某一列进行求和。 - sum(col3) over (partition by col1 order by col2)
根据col1进行分组,在分组内部根据col2排序,按照排序的顺序对col3求和(分组内不断累加)。 - 示例
执行:
select *, sum(grade) over (partition by class order by age) from public.grade_list;
结果:
注意:
当order by col2 中的col2的数据相等时,认为它们的排序是相同的,那么执行sum()时所有class和age都相等的数据它们的sum结果也是相等的,值为它们的grade的总和。
4. 对于函数avg(), max()等同理。
sum(col3) over (partition by col1, col2)
- 概念:
如果说partition by col1 order by col2是按照col1分组,按照col2排序的话,partition by col1, col2则为按照col1和col2分组,即只有col1和col2都相同的数据才会被分为一组。 - max()
求分组内最大值。 - 示例
数据:与上例相同
执行:
select *, sum(grade) over (partition by class, age) from public.grade_list;
结果:
结论:只有再age和class都相同时才视为一组,并计算分组内总和。
注意:一定要注意区分和partition by col1 order by col2 的区别。
这篇关于PL/pgSQL初学之路(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现
- 2024-05-30我们小公司,哪像华为一样,用得上IPD(集成产品开发)?