如何通过1个SQL查询使用Group by
和Group_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中显示所需的结果。
答案 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
它使用双重聚合,首先按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>