#mysql #count
#mysql #подсчитывать
Вопрос:
ВЫБЕРИТЕ reporting.station ИЗ reporting LEFT JOIN channel НА MD5(igmpurl)=reporting.station, ГДЕ reporting.station!= «n/a» УПОРЯДОЧИТЬ ПО имени;
в результате получается эта таблица:
Теперь я хотел бы подсчитать количество каждого элемента, которое должно выглядеть примерно так:
Примечание: я знаю о COUNT(station)
том, что вернет количество строк (20), но это не то, что я хочу.
Есть идеи, как решить это в MySQL (InnoDB)? Большое спасибо и с уважением
Ответ №1:
SELECT
reporting.station, COUNT(reporting.station)
FROM
reporting
LEFT JOIN
channel
ON
MD5(igmpurl)=reporting.station
WHERE
reporting.station!="n/a"
GROUP BY reporting.station
ORDER BY
name;
Попробуйте это.
Ответ №2:
Использовать COUNT()
и GROUP BY
:
В вашем случае это должно быть что-то вроде этого:
SELECT
reporting.station,
COUNT(*) AS rep_station_count
FROM
reporting
LEFT JOIN
channel
ON
MD5(igmpurl)=reporting.station
WHERE
reporting.station!="n/a"
GROUP BY
reporting.station
ORDER BY
name;
Обратите внимание, что разрешение обычных и агрегированных столбцов (например, AVG()
, COUNT()
и т.д.) В одном запросе зависит от MySQL.
Комментарии:
1. (кроме того, я не совсем уверен, для чего вам нужно
ORDER BY
, но это не имеет прямого отношения к вашему вопросу)2. Вам тоже спасибо. Я соглашусь с Headshota, потому что он был на 2 минуты быстрее : P (и ему репутация нужна больше, чем вам : P)
ORDER BY
не это важно. Могу ли я каким-то образом получить строку с наибольшим количеством? Или это самый простой способORDER BY
подсчитать и взять первое?3. @Atmocreations: Для получения максимального количества вы на правильном пути: в этом случае это было бы
ORDER BY rep_station_count DESC
— первая строка — это та, которую вы хотите. Самый простой и, вероятно, самый быстрый тоже 🙂