MYSQL Group by和Group Concat问题

JHO

如何通过1个SQL查询使用Group byGroup_concat实现以下两种情况?

对于情况1,即使设备1,2和3,4的组ID不同,由于组1和组2的名称和平台相同,因此输出设备ID仍应串联。

案例1
表:SMARTPHONE ============================================ GROUP_ID DEVICE_ID名称平台 1 1 LG ANDROID 1 2 APPLE IOS 2 3 LG ANDROID 2 4 APPLE IOS 所需的输出 ROW DEVICE_ID 0 1,2,3,4

对于情况2,由于组2中的名称值之一与组1不同
(即设备3,Samsugn不等于设备1 LG),因此它将分为两个不同的组。

案例2
表:SMARTPHONE =========================================== GROUP_ID DEVICE_ID名称平台 1 1 LG ANDROID 1 2 APPLE IOS 2 3 SAMSUGN ANDROID 2 4 APPLE IOS 所需的输出 ROW DEVICE_ID 0 1,2 1 3,4

就像将所有值作为一个组进行比较一样。如果组的值与另一组的值相同,则应将它们的ID分组,如情况1所示。否则,应将其分开。


我尝试过的@Zaynul Abadin Tuhin提出的建议。
对于案例1,我尝试了select 1 as grp,group_concat(DEVICE_ID SEPARATOR ',') from school group by grp union select GROUP_ID,group_concat(DEVICE_ID SEPARATOR ',') from school group by GROUP_ID但是我得到了

输出
ROW DEVICE_ID 
0 1,2,3,4 
1 1,2 
2 3,4

我期望如果在情况1上运行查询,它将给我在情况1中显示的所需结果。如果在情况2上运行相同的查询,它将给我在情况2中显示的所需结果。

米恰尔·图尔钦

试试这个:

select @rn := 0;
select @rn := @rn + 1 rn,
       group_concat(device_ids),
       names, platforms
from (
    select group_id,
           group_concat(device_id) device_ids, 
           group_concat(name order by name) names, 
           group_concat(platform order by platform) platforms
    from tbl
    group by group_id
) a group by names, platforms

演示版

它使用双重聚合,首先使用group_id,然后按并置的名称进行分组,并且平台是相同的(我曾经order by确保它与顺序无关地匹配)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章