MYSQL Group by和Group Concat问题

时间:2018-09-06 07:24:10

标签: mysql sql

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

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

CASE 1
Table: SMARTPHONE ========================================== GROUP_ID DEVICE_ID NAME PLATFORM 1 1 LG ANDROID 1 2 APPLE IOS 2 3 LG ANDROID 2 4 APPLE IOS
Desired Output ROW DEVICE_ID 0 1,2,3,4

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

CASE 2
Table: SMARTPHONE ========================================== GROUP_ID DEVICE_ID NAME PLATFORM 1 1 LG ANDROID 1 2 APPLE IOS 2 3 SAMSUGN ANDROID 2 4 APPLE IOS Desired Output 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但得到

Output
ROW   DEVICE_ID
0     1,2,3,4
1     1,2
2     3,4

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

3 个答案:

答案 0 :(得分: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

Demo

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

答案 1 :(得分:1)

使用group_concat

案例1

 select 1 as grp,group_concat(DEVICE_ID SEPARATOR ',')
    from SMARTPHONE group by grp

案例2

select GROUP_ID,group_concat(DEVICE_ID SEPARATOR ',')
from SMARTPHONE group by GROUP_ID

您说过要同时进行两个查询,所以下面是联合操作

 select 1 as grp,group_concat(DEVICE_ID SEPARATOR ',')
    from SMARTPHONE group by grp
union
select GROUP_ID,group_concat(DEVICE_ID SEPARATOR ',')
from SMARTPHONE group by GROUP_ID

答案 2 :(得分:0)

情况1:

<declare-styleable name="InputView">
        <attr name="android:text" format="string" />
        <attr name="android:hint" format="string"/>
</declare-styleable>