MySQL: подсчитывать определенные значения

#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 — первая строка — это та, которую вы хотите. Самый простой и, вероятно, самый быстрый тоже 🙂