Выпуск MYSQL Group by и Group Concat - PullRequest
       1

Выпуск MYSQL Group by и Group Concat

0 голосов
/ 06 сентября 2018

Как я могу использовать Group by и Group_concat для достижения обоих указанных ниже случаев с помощью одного SQL-запроса?

В случае 1, даже если идентификатор группы для устройств 1,2 и 3,4 отличается, идентификатор устройства вывода все равно должен объединяться, поскольку имя и платформа группы 1 и группы 2 совпадают.

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

Для случая 2, поскольку одно из значений имени в группе 2 отличается от группы 1
(т. Е. Device 3, Samsugn не равно Device 1, LG), поэтому оно будет разделено на две разные группы.

CASE 2<br>
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

Это похоже на сравнение всех значений как группы. Если группа имеет значения, идентичные другой группе, их идентификаторы должны быть сгруппированы вместе, как в случае 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, он даст мне желаемый результат, показанный в первом случае. Если я выполню тот же запрос в случае 2, он даст мне желаемый результат, показанный в случае два.

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018

Дело 1:

select 0, group_concat(DEVICE_ID SEPARATOR ',') from SMARTPHONE 
0 голосов
/ 06 сентября 2018

Попробуйте это:

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, чтобы убедиться, что он будет соответствовать независимо от порядка).

0 голосов
/ 06 сентября 2018

использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...