MySQL использует GROUP BY для группировки по нескольким столбцам - PullRequest
0 голосов
/ 06 января 2012

Я бы хотел использовать несколько столбцов GROUP BY, я думаю, что лучше начать с примера:

SELECT
    eventsviews.eventId,
    showsActive.showId,
    showsActive.venueId,
    COUNT(*) AS count
FROM eventsviews

INNER JOIN events ON events.eventId = eventsviews.eventId
INNER JOIN showsActive ON showsActive.eventId = eventsviews.eventId

WHERE events.status = 1

GROUP BY showsActive.venueId, showsActive.showId, showsActive.eventId
ORDER BY count DESC
LIMIT 100;

Вывод:

| *eventId* | *showId* | *venueId* | *count* |
+-----------+----------+-----------+---------+
  [...snip...]
| 95        | 92099    | 9770      | 32      |
| 95        | 105472   | 10702     | 32      |
| 3804      | 41225    | 8165      | 17      |
| 3804      | 41226    | 8165      | 17      |
| 923       | 2866     | 5451      | 14      |
| 923       | 20184    | 5930      | 14      |
  [...snip...]

Что бы я хотел вместо этого:

| *eventId* | *showId* | *venueId* | *count* |
+-----------+----------+-----------+---------+
| 95        | 92099    | 9770      | 32      |
| 3804      | 41226    | 8165      | 17      |
| 923       | 20184    | 5930      | 14      |

Итак, я хочу, чтобы мои данные были сгруппированы по eventId, но только один раз для каждого showId и venueId ...

У меня фактически есть SQL-запрос, который делает это, но он имеет 8подзапросы и такие же медленные, как T-Ford ... И так как это выполняется при каждой загрузке страницы, ускорение выглядит как хорошая идея!

Есть несколько вопросов, таких какэто, и я пробовал много разных вещей, но я был на этот запрос в течение часа, и я не могу заставить его работать так, как я хочу: - (

Спасибо!

Ответы [ 2 ]

1 голос
/ 06 января 2012

Вы, вероятно, хотите указать минимальное или максимальное значение для showid, а затем не включать его в группу, я не могу сказать, потому что, глядя на ваш «предпочтительный» набор результатов, вы получаете оба.

0 голосов
/ 06 января 2012

Если вы хотите, чтобы ваши данные группировались по eventId, группируйте их только по eventId, и вы получите именно тот результат, который вы ищете.

Это функция MySQL (?), Которая позволяет вам выбиратьнеагрегированные столбцы, в этом случае он вернет первую доступную строку.В других СУБД это достигается с помощью DISTINCT ON, который недоступен в MySQL.

...