【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日
    浏览(59)
  • python基础学习6【DatatimeIndex与PeriodIndex函数+Timedelta类+连接数据库+agg()函数和aggregate()函数】

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月02日
    浏览(41)
  • MYSQL学习——聚合函数

    目录 1. 聚合函数介绍 1) AVG和SUM函数 2) MIN和MAX函数 3) COUNT函数 2. GROUP BY 1) 基本使用 2) 使用WITH ROLLUP 3. HAVING 1) 基本使用 2) WHERE和HAVING的对比 4. SELECT的执行过程 1) 查询的结构 2) SQL的执行原理 什么是聚合函数 聚合函数作用于一组数据,并对一组数据返回一个值。 聚合函数类型

    2024年01月21日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包