Объединить все один столбец в сгруппированном наборе результатов в одном запросе: возможно ли это? - PullRequest
0 голосов
/ 23 декабря 2009

На данный момент у меня есть следующий запрос MySQL:

SELECT 
    COUNT(*) AS `count`, 
    `v`.`value` 
FROM `client_entity_int` AS `v` 
INNER JOIN `client_entity` AS `e` 
ON e.id = v.entity_id 
WHERE (v.attribute_id = '1') AND (e.deleted = 0) 
GROUP BY `v`.`value`

Что возвращает следующее:

+-------+-------+
| count | value |
+-------+-------+
|     9 |     0 |
|    11 |     1 |
+-------+-------+

То, что я хотел бы вернуть, это выше, ВКЛЮЧАЯ столбец, показывающий разделенный запятыми агрегат всех entity_id, найденных в вышеупомянутом запросе.

Возможно ли это в том же запросе, и если да, то как? Пример:

+-------+------------------+
| count | value | entities |
+-------+-------+----------|
|     9 |     0 |  1,2,3,4 |
|    11 |     1 |          |
+-------+-------+----------|

Ответы [ 3 ]

3 голосов
/ 23 декабря 2009

Использование:

  SELECT COUNT(*) 'count', 
         v.value,
         GROUP_CONCAT(DISTINCT v.entity_id ORDER BY v.entityid ASC SEPARATOR ',') 'entities'
    FROM client_entity_int AS v 
    JOIN client_entity AS e ON e.id = v.entity_id 
   WHERE v.attribute_id = '1'
     AND e.deleted = 0
GROUP BY v.value

Ссылка: GROUP_CONCAT

Вам нужно использовать только обратные метки для ключевых слов MySQL.

2 голосов
/ 23 декабря 2009

Использование group_concat, как предложил Алекс. Итак, ваш запрос выглядит как

SELECT 
    COUNT(*) AS `count`, 
    `v`.`value`,
    GROUP_CONCAT(entity_id SEPARATOR ',') as entities
FROM `client_entity_int` AS `v` 
INNER JOIN `client_entity` AS `e` 
ON e.id = v.entity_id 
WHERE (v.attribute_id = '1') AND (e.deleted = 0) 
GROUP BY `v`.`value`

на самом деле вы можете отключить разделитель ',' потому что это по умолчанию, но, по крайней мере, вы знаете, как его изменить сейчас:)

2 голосов
/ 23 декабря 2009

Добавьте group_concat(entity_id SEPARATOR ',') AS entities к смеси.

...