mysql查询的单个字段值不同的重复数据进行合并

关于mysql查询的单个字段值不同的重复数据进行合并解决方法

先列出解决方案sql

SELECT
	v1.*,
	group_concat( device.partner_name ) AS partner_name,
	group_concat( device.partner_mode ) AS partner_mode,
IF
	( device.partner_name IS NULL OR device.partner_name = '', '', v1.eps_multiple_payments_value1 ) AS eps_multiple_payments_value 
FROM
	(
SELECT
	id,
	created_at,
	eps_multiple_payments,
	( CASE eps_multiple_payments WHEN '0' THEN '全部' WHEN '1' THEN '启用' WHEN '2' THEN '禁用' ELSE '--' END ) AS `eps_multiple_payments_value1` 
FROM
	gas_station 
	) AS v1
	LEFT JOIN is_gas.gas_station_cashier_device_supplier device ON v1.id = device.station_id 
GROUP BY
	v1.id 
ORDER BY
	v1.created_at DESC
    

这条sql解决了两个问题:

1、v1单表查询的时候数据有1975条,连表后有1979条,有4条数据除了次表的partner_name和partner_mode字段其他字段都是一样的,是一对多的关系。
在这里插入图片描述
下图修改为上图:
要求吧重复的数据合并,partner_name和partner_mode按照逗号拼接放到一起。

这里是使用GROUP BY v1.id 根据主表的id进行分组,
然后使用group_concat( device.partner_name ) AS partner_name,
	group_concat( device.partner_mode ) AS partner_mode 函数进行拼接

group_concat函数
  将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
group_concat函数首先根据group by指定的列进行分组,将同一组的列显示出来,并且用分隔符分隔。
group_concat函数

2.需要实现当partner_name有值的时候,才能给eps_multiple_payments_value1赋值,因为eps_multiple_payments_value1是镶嵌在内部表的字段,然而先要判断的是外层表的partner_name字段。
在这里插入图片描述
下图修改为上图:
这个把镶嵌表的字段名改一下,到外层重新进行判断赋值,再更换命名就行了,

1.重命名( CASE eps_multiple_payments WHEN '0' THEN '全部' WHEN '1' THEN '启用' WHEN '2' THEN '禁用' ELSE '--' END ) AS `eps_multiple_payments_value1` 
2.判空 再赋值,并重命名 IF( device.partner_name IS NULL OR device.partner_name = '', '', v1.eps_multiple_payments_value1 ) AS eps_multiple_payments_value 

IF函数:
IF函数根据判断条件是否成立进行选择执行,成立时执行一条语句,不成立时执行另一条语句
if (条件, value_if_true, value_if_false)
IF函数

case函数:

( CASE eps_multiple_payments 
	WHEN '0' THEN '全部' 
	WHEN '1' THEN '启用' 
	WHEN '2' THEN '禁用' 
	ELSE '--' END ) AS `eps_multiple_payments_value1`
或者
(	CASE  
 	WHEN 英语成绩 > 60 THEN '运气罢了~' 
 	WHEN 英语成绩 = 60 THEN '大难不死' 
 	WHEN 英语成绩 < 60 THEN '你!已经死了!!!' 
 	ELSE '逃课是吧,你完了!' END ) AS `英语考试结果` 

case函数

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值