【PgSQL】聚合函数string_agg

这篇具有很好参考价值的文章主要介绍了【PgSQL】聚合函数string_agg。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在工作中,遇到了这样的需求,需要根据某一个字段A分组查询,统计数量,同时还要查询另一个字段B,但是呢这个字段B在分组后的记录中存在不同的值。最开始不知道有聚合函数可以实现这一功能,在代码中进行了处理。后来,经老同事的提醒,得知了string_agg这个函数,便稍微查询整理了一下。

我们先新建一张表,插入一点数据,方便演示

CREATE TABLE public.user_info_test (
	"name" varchar NULL,
	hobby varchar **NULL**
);

INSERT INTO public.user_info_test ("name",hobby) VALUES
	 ('张三','足球'),
	 ('张三','羽毛球'),
	 ('李四','羽毛球'),
	 ('李四','篮球'),
	 ('王五','乒乓球'),
	 ('王五','乒乓球'),
	 ('张三','足球');

简单的表结构,有name,hobby两个字段。类似的需求就是根据name,分组,同时查询这个人有哪些爱好。string_agg()最简单的使用就是传入拼接的字段和连接符,如下所示:

select name ,string_agg(hobby,'-') as hobbies from user_info_test group by name

name|hobbies |
----±--------+
张三 |足球-羽毛球-足球|
李四 |羽毛球-篮球 |
王五 |乒乓球-乒乓球|

可以看到,每个人的多个hobby被拼接到了一起。但是存在重复的记录,可以用distinct去重。

select name ,string_agg(distinct hobby,'-') as hobbies from user_info_test group by name

name|hobbies|
----±------+
张三 |羽毛球-足球 |
李四 |篮球-羽毛球 |
王五 |乒乓球|

有的时候我们可能还需要对hobby字段进行排序,可以使用如下形式,默认是asc排序:

select name ,string_agg(distinct hobby,'-' order by hobby asc) as hobbies from user_info_test group by name

name|hobbies|
----±------+
张三 |羽毛球-足球 |
李四 |篮球-羽毛球 |
王五 |乒乓球

select name ,string_agg(distinct hobby,'-' order by hobby desc) as hobbies from user_info_test group by name

name|hobbies|
----±------+
张三 |足球-羽毛球 |
李四 |羽毛球-篮球 |
王五 |乒乓球


由于工作中使用的是pgsql,所以以上是pgSQL中string_agg函数的用法,很多情况下还是会用到mysql的,所以我查了一下mysql是否也有相关的函数,mysql果然没有让我失望,类似的函数叫做group_concat

下面演示mysql中group_concat的相关用法

select name ,group_concat(hobby) as hobbies from user_info_test group by name

select name ,group_concat(hobby separator '-' ) as hobbies from user_info_test group by name

select name ,group_concat(distinct hobby separator '-') as hobbies from user_info_test group by name

select name ,group_concat(distinct hobby order by hobby asc separator '-') as hobbies from user_info_test group by name

select name ,group_concat(distinct hobby order by hobby desc separator '-') as hobbies from user_info_test group by name文章来源地址https://www.toymoban.com/news/detail-821301.html

到了这里,关于【PgSQL】聚合函数string_agg的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch实战(十五)---查询query,filter过滤,结合aggs 进行局部/全局聚合统计

    Elasticsearch实战-查询query,filter过滤,结合aggs 进行局部/全局聚合统计 1.准备数据 2. ES 查询query,filter过滤,结合aggs 聚合统计 2.1 查询命中后,基于查询的数据进行聚合 前面我们讲的所有的聚合操作 都是没有查询的,都是上来直接 aggs 进行 聚合 avg, count, 如果现在我想统计

    2024年02月10日
    浏览(55)
  • python基础学习6【DatatimeIndex与PeriodIndex函数+Timedelta类+连接数据库+agg()函数和aggregate()函数】

    转换与处理时间序列数据   转换字符串时间为标准时间: Timestamp类型:最基础最常用。 如果超出时间戳最大值,最小值,时间戳存储可能不成功 : DatatimeIndex与PeriodIndex函数【其实俺暂时不懂这俩能干啥呜呜呜】 Timedelta类 不仅能够使用正数,也能使用负数; 可以轻松实现在

    2024年02月10日
    浏览(52)
  • 【PGSQL】date_trunc 函数

    date_trunc 函数用于在 PostgreSQL 中将日期或时间戳值截断(向下取整)到指定的精度级别。当您想要忽略较小的时间单位(例如,小时、分钟、秒),专注于较大的单位(例如,天、月、年)时,该函数非常有用。 date_trunc 的语法如下: date_trunc(unit, source); unit :指定要将源值截

    2024年01月17日
    浏览(38)
  • Tableau 聚合函数与非聚合函数

        在初步深入了解Tableau后,总会被一个报错困扰,不能混合聚合与非聚合比较结果,那么当我们遇到了这个情况的时候该怎么办呢?    什么是聚合函数?常见的有 sum、count、max、min、avg 等。不含这些函数运算的即为非聚合函数。    我的建议是将非聚合函数变为聚合函数

    2024年02月15日
    浏览(36)
  • TDengine函数大全-聚合函数

    以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 APERCENTILE 功能说明 :统计表/超级表中指定列的值的近似百分比分位数,与 PERCENTIL

    2024年02月10日
    浏览(49)
  • 聚合函数与窗口函数

    聚合函数(Aggregate Functions)是SQL中的函数,用于对一组数据进行计算,并返回单个结果。聚合函数通常用于统计和汇总数据,包括计算总和、平均值、计数、最大值和最小值等。 以下是一些常见的聚合函数: SUM():计算指定列或表达式的总和。 AVG():计算指定列或表达式的

    2024年02月10日
    浏览(44)
  • Hive学习---4、函数(单行函数、高级聚合函数、炸裂函数、窗口函数)

    1.1 函数简介 Hive会将常用的逻辑封装成函数给用户进行使用,类似java中的函数。 好处:避免用户反复写逻辑,可以直接拿来使用 重点:用户需要知道函数叫什么,能做什么 Hive提供了大量的内置函数,按照其特点大致可分为如下几类:单行函数、聚合函数、炸裂函数、窗口

    2024年02月08日
    浏览(60)
  • 聚合函数+group by

    常用的聚合函数有COUNT()、AVG()、SUM()、MAX()、MIN()。 COUNT()函数:统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。 COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。 COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。 对于

    2024年02月02日
    浏览(39)
  • MySQL:聚合函数(全面详解)

    欢迎 免费报名 由CSDN主办的【Java基础及数据库Mysql的新星计划】(点击跳转) 我们特别为 Java基础 和 MySQL 这两个赛道开设了培训课程。 通过参与这个赛道,你将有机会与其他志同道合的学习者进行交流和互动,我们提供一系列精心设计的课程内容,旨在帮助你建立扎实的Java基

    2024年02月11日
    浏览(38)
  • 【MySQL】聚合函数

    SUM():求总和,只适用于数值类型字段,如果是字符串类型不会报错会返回0,会自动过滤空值 AVG():求平均值,只适用于数值类型字段,字符串类型不会报错会返回0,会自动过滤空值 MAX():求最大值,适用于数值类型、字符串类型和日期时间类型字段 MIN():求最小值,适用于

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包