数据进行分组后同一字段字符串连接方法

文章讲述了在处理数据时遇到的问题,尝试在MySQL中使用某个函数来按/’分隔同一id_supplier_basic_info的supplier_type,但出现错误提示。后来发现数据库实际上是PostgreSQL,从而转向寻找适用于PostgreSQL的方法来实现数据拼接。

数据源如下:期望将同一个id_supplier_basic_info输出的supplier_type写在一行上,可以按‘/’分隔

 一开始的时候使用的是但是一直提示找不到这个函数,一时陷入迷惑,难道是mysql不支持这个函数?但是百度明明都说mysql是支持的

 结果,视图想换个工具去查看数据库的时候发现原来用的是postgrelSQL,找到下列方法尝试可用

 

### SQL 同一字段分组查询 `GROUP BY` 示例 在 SQL 中,`GROUP BY` 是一种常用的分组操作方法,它可以按照某个字段或表达式的唯一值对数据进行分组。当需要针对同一字段执行分组查询时,通常会结合聚合函数(如 `COUNT()`、`SUM()`、`AVG()` 等)一起使用。 #### 示例 1:统计某字段中每种取值的数量 假设有一个名为 `employees` 的表,其中包含员工的信息以及所属部门编号 (`department_id`)。如果想统计每个部门有多少名员工,则可以使用如下 SQL: ```sql SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id; ``` 此查询将返回每一行代表一个唯一的 `department_id` 及其对应的员工数量[^1]。 --- #### 示例 2:筛选满足特定条件的分组结果 继续以上述表格为例,如果我们只关心那些拥有超过 5 名员工的部门,可以在原有基础上加入 `HAVING` 子句实现进一步过滤: ```sql SELECT department_id, COUNT(*) AS employee_count FROM employees GROUP BY department_id HAVING COUNT(*) > 5; ``` 这里通过 `HAVING` 来限定只有那些计数大于 5 的分组才会被显示出来[^3]。 --- #### 示例 3:处理带有 NULL 值的情况 有时,在实际应用过程中可能会遇到某些记录中的目标字段为空(`NULL`)的情形。在这种情况下,默认行为是把所有的 `NULL` 当作单独的一类来进行汇总计算。例如下面这个例子展示了如何查看哪些产品类别没有任何销售记录: ```sql SELECT product_category, SUM(sales_amount) AS total_sales FROM sales_data WHERE sale_date >= '2023-01-01' GROUP BY product_category WITH ROLLUP; ``` 这里的 `WITH ROLLUP` 提供了一个额外的功能——除了正常的按分类加总外还会给出整体合计数值;而即使存在缺失的产品种类也会被列入考虑范围之内。 --- #### 示例 4:字符串连接分组 对于一些特殊需求场景下可能还需要完成诸如将同属一类项的名字串联起来这样的任务。这时需要用到嵌套子查询或者专门设计好的功能扩展库来达成目的。比如给定一张存储用户ID及其关联标签列表的关系型数据库表结构@T ,那么可以通过以下方式获取每位用户的全部标签串连成逗号分割的形式呈现: ```sql SELECT id, STUFF((SELECT ',' + code FROM @T B WHERE B.id = A.id FOR XML PATH('')), 1, 1, '') AS UserTags FROM @T A GROUP BY id ; ``` 这段脚本利用了XML路径模式配合STUFF去除前导多余的分隔符从而达到最终效果[^2]。 --- ### 注意事项 - 使用 `GROUP BY` 进行分组时需确保所选列要么参与分组要么作为聚集函数输入参数之一。 - 如果希望得到更灵活的数据展示形式可尝试引入窗口函数替代传统意义上的简单分组机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

agrapea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值