如何通过1个SQL查询使用Group by
并Group_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] 删除。
我来说两句