Получить альтернативные значения атрибута в запросе GROUP BY? - PullRequest
0 голосов
/ 30 июля 2010

Позвольте мне объяснить, что я имею в виду с этим вопросом:

Допустим, у меня есть такие таблицы:

customers
id customer location
1   Adam     UK
2   Pete     US

values
id value
1   10
1    7
2    3
2   41

Давайте на минуту проигнорируем, что это (и следующий запрос) не будет иметь большого смысла. Это упрощенный пример.

Теперь, если я выполню этот запрос

SELECT id, customer, value FROM customers INNER JOIN values GROUP BY id

Я должен получить этот результат (по идентификатору)

id customer value
1    Adam    10
2    Pete     3

Я хотел бы иметь возможность использовать его в списке результатов поиска, но для фактического отображения результатов я хотел бы сделать что-то вроде этого:

Customer: Adam
Values: 10, 7

Итак, в основном, хотя мне нужен набор результатов, отличный от идентификатора, я все же хотел бы как-то сохранить строки, отброшенные GROUP BY, чтобы показать список значений, как указано выше. Каков наилучший способ сделать это?

Ответы [ 2 ]

5 голосов
/ 30 июля 2010

Посмотрите на http://mysql.com/group_concat - который будет работать только в MySql.

Лучшая ссылка: http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_group-concat

0 голосов
/ 30 июля 2010

Технически, следующее не является допустимым SQL, даже если MySQL разрешает это:

Select customers.id, customers.customer, values.value 
From customers 
    Inner Join values 
        On values.id = customers.id
Group By customers.id

Спецификация SQL требует, чтобы на каждый столбец в предложении Select ссылались в Group By или в статистической функции.Однако, учитывая то, что вы сказали позже в своем посте, я думаю, что вы хотите, чтобы это было GROUP_CONCAT , как впервые упомянул Эрик (+1), который является функцией, специфичной для MySQL:

Select customers.customer, Group_Concat(values.value)
From customers 
    Inner Join values 
        On values.id = customers.id
Group By customers.customer
...