You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL去重需求:查询时chapter字段不重复,按章节展示注册名称

嘿,这个需求挺常见的,我给你分两种场景来解决——一种是用SQL直接输出聚合后的结果,另一种是在应用层实现更美观的分层展示,你可以根据自己的实际情况选:

解决方案

1. SQL聚合函数实现(单条结果行展示章节+注册名列表)

如果只是想把同一章节的所有注册名合并成一个列表,直接用各数据库对应的字符串聚合函数就能搞定,查询结果里每个章节只出现一次,后面跟着对应的注册名集合:

MySQL/MariaDB

SELECT 
  chapter,
  GROUP_CONCAT(registration_name SEPARATOR ', ') AS registration_names
FROM your_table_name
GROUP BY chapter
ORDER BY chapter;

你可以把分隔符改成换行符(SEPARATOR '\n'),如果用的是支持换行显示的数据库客户端,就能看到章节和注册名的分层效果。

PostgreSQL

PostgreSQL用STRING_AGG,还能顺便给注册名排序:

SELECT 
  chapter,
  STRING_AGG(registration_name, ', ' ORDER BY registration_name) AS registration_names
FROM your_table_name
GROUP BY chapter
ORDER BY chapter;

SQL Server(2017及以上版本)

SQL Server同样支持STRING_AGG,语法稍微有点不同:

SELECT 
  chapter,
  STRING_AGG(registration_name, ', ') WITHIN GROUP (ORDER BY registration_name) AS registration_names
FROM your_table_name
GROUP BY chapter
ORDER BY chapter;

2. 应用层处理(实现章节单独换行+注册名列表的格式)

如果想要更直观的分层展示,比如这样的效果:

章节A

  • 注册名1
  • 注册名2
    章节B
  • 注册名3

那更推荐在应用代码里处理,先查所有排序好的数据,再通过代码逻辑控制显示格式:

首先执行基础查询(按章节排序,确保同一章节的注册名排在一起):

SELECT chapter, registration_name
FROM your_table_name
ORDER BY chapter, registration_name;

然后用你熟悉的编程语言遍历结果,维护一个当前章节的变量,当章节切换时打印新的章节名,下面逐个输出注册名。举个Python的简单示例:

# 这里以PostgreSQL为例,其他数据库的驱动用法类似
import psycopg2

# 连接数据库
conn = psycopg2.connect("dbname=你的数据库名 user=你的用户名 password=你的密码")
cur = conn.cursor()

# 执行查询
cur.execute("SELECT chapter, registration_name FROM your_table_name ORDER BY chapter, registration_name")

current_chapter = None
# 遍历结果并格式化输出
for chapter, reg_name in cur.fetchall():
    if chapter != current_chapter:
        # 章节切换时,打印新的章节名
        print(f"\n**{chapter}**")
        current_chapter = chapter
    # 打印当前章节下的注册名
    print(f"- {reg_name}")

# 关闭连接
cur.close()
conn.close()

这样就能完美实现你想要的“每个章节名仅显示一次,下方展示对应注册名称列表”的效果啦。

内容的提问来源于stack exchange,提问作者Abdullah Oqdah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:00