省市或其他联动查询的sql(group_concat)【同一张表去重复的值】

本文介绍了一种在MySQL中实现省市联动查询的方法。针对只有一张表包含省市数据的情况,通过使用group_concat()和DISTINCT关键字,成功实现了去除省市重复项的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做web项目的时候,需要显示省市的联动查询条件。之前有做过联动查询,但之前做的是有主键依附关系的。也就是有专门的省市表。目前这个是只有一张表,省市其他数据都在一张表,只知道要去重,对sql是我掌握也不咋样,自己写的,只是简单的去除了其他列,只留下了省市,但是省得值还是有重复,顿时不知咋办,后面在友好的同事的帮助下,在此也是很感谢友好的小伙伴,哈哈。写好了sql;(mysql)

sql如下:

select  t.province,group_concat(DISTINCT(t.city)) as city  from table t  where t.province= group by t.province

效果图:


链接:https://www.cnblogs.com/vanl/p/5912903.html

### SQL `GROUP_CONCAT` 函数详解 #### 定义与语法结构 `GROUP_CONCAT` 是一种聚合函数,在 MySQL 数据库中用于将分组中的多行数据连接成单个字符串。此功能对于需要汇总特定字段的应用场景非常有用。 - **基本形式** ```sql GROUP_CONCAT([DISTINCT] expr [[ORDER BY asc_or_desc_ordering_expression]] [SEPARATOR sep]) ``` - 参数说明: - `[DISTINCT]`: 去除重复项后再做拼接操作[^3]。 - `expr`: 被组合起来的一列多列达式,通常是一个具体的列名。 - `ORDER BY`: 对参与运算的数据按升序降序排列;可以基于任意合法的排序达式来定义顺序[^4]。 - `SEPARATOR`: 自定义各元素间的间隔字符,默认情况下为逗号 `,`[^5]。 #### 实际应用案例展示 假设有一个名为 `orders` 的订单,其中包含三列:`order_id`, `customer_name`, 和 `product_name`. 若要获取每位顾客所购买商品名称组成的列,则可以通过如下语句实现: ```sql SELECT customer_name, GROUP_CONCAT(product_name ORDER BY product_name SEPARATOR '; ') AS products_bought FROM orders GROUP BY customer_name; ``` 上述命令会返回每条记录代一位客户及其对应的商品清单,并且按照字母先后次序显示各个产品之间通过分号加空格相隔开来的样子. 另外得注意的是当遇到某些特殊需求比如仅保留不相同的项目时可以在原有基础上加上关键字 `DISTINCT` 来达到目的: ```sql SELECT customer_name, GROUP_CONCAT(DISTINCT product_name ORDER BY product_name SEPARATOR ',') AS unique_products_purchased FROM orders WHERE order_date >= '2023-01-01' GROUP BY customer_name; ``` 这段代码片段将会筛选出自今年初以来每个消费者至少买过一次的不同种类货物名单。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值