2009-12-03 1 views
110

Возможно ли использовать GROUP BY более одного столбца в запросе MySQL SELECT? Например:Возможно ли использовать GROUP BY несколькими столбцами с использованием MySQL?

GROUP BY fV.tier_id AND 'f.form_template_id' 
+3

Вы не можете сгруппировать по строкам. Вы можете группировать по столбцам, хотя –

+12

Для SEO: мой первый поиск был для «multiple» GROUP BY' MySQL ». –

+8

Это не для SEO, это для пользователей. – Buffalo

ответ

2
GROUP BY CONCAT(col1, '_', col2) 
+21

Интересно, как ответ с одной строкой кода, опубликованной через 4 года после ответа на вопрос, получает 8 (восемь!) Upvotes. Кроме того, они являются неправильными и неэффективными, кроме позднего и короткого. –

+3

Даже слепая белка получает орех то и дело ... – thebarless

+5

@ ypercubeᵀᴹ почему вы говорите, что это неправильно? Это именно то, что я искал, и правильную интерпретацию «группы по нескольким столбцам». На самом деле, я не знаю, почему это не поведение «group by col1, col2», как я ожидал. – Abram

49

Да, вы можете сгруппировать по нескольким столбцам. Но вы не можете получить правильный ответ.

select * from table group by col1, col2 

Где
        col1 получил первое предпочтение сгруппированных и col2 получил второе предпочтение. Потому что mysql дает предпочтение слева направо.

+1

Предпочтение слева направо применяется к возрастающему порядку группировок, а не к предпочтению группы столбцов. 'GROUP BY' применяет' col1 + col2'. например 'col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2' и работает 'GROUP BY col1, col2' вернет' 1,1 | 1,3 | 2,2' в отличие от '1,1 | 2,2', как было предложено. Принимая во внимание, что «GROUP BY col2, col1» изменит восходящий порядок возврата col2. '1,1 | 2,2 | 1,3' Demo: http://sqlfiddle.com/#!9/d5f69/1 Обратите внимание, что идентификатор строки: 2 возвращается в обоих случаях для' 2,2', несмотря на инвертирование колонны. – fyrye

+0

Да, Mysql дал нам неверный результат –

12

Да, но что означает группировка более двух столбцов? Ну, это то же самое, что группировка по каждой уникальной паре в строке. При заказе списка столбцов изменяется порядок сортировки строк.

В вашем примере, можно было бы написать

GROUP BY fV.tier_id, f.form_template_id

Между тем, код

GROUP BY f.form_template_id, fV.tier_id

даст аналогичные результаты, но отсортированы по-разному.

2

Чтобы использовать простой пример, у меня был счетчик, который должен был суммировать уникальные IP-адреса на каждую посещенную страницу на сайте. Что в основном группируется по pagename, а затем по IP. Я решил это с помощью комбинации DISTINCT и GROUP BY.

SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC; 
0

Если вы предпочитаете (мне нужно применить эту группу) двумя колоннами в то же время, я только что видел этот момент:

SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1 

 Смежные вопросы

  • Нет связанных вопросов^_^