Как вывести максимум - PullRequest
       2

Как вывести максимум

0 голосов
/ 05 ноября 2018

Я просто пытаюсь понять, как использовать max и count для моих запросов. У меня есть следующий код:

 SELECT SERVICE, COUNT(*)
 FROM SUBSCRIBERS INNER JOIN SERVICE_SUBSCRIBERS ON
 SERVICE_SUBSCRIBERS.LINE=SUBSCRIBERS.PORTID
 GROUP BY SERVICE;

Какие выходы:

3WC|12
CFB|17
CWT|20
DSP|16
MSG|25

Но я хочу вывести только максимум (MSG | 25). Я также хотел бы знать, как вывести в соответствии с определенным условием (> 15). Я просто не уверен, как использовать функции count и max одновременно.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вам не нужно использовать max здесь - вы можете просто ограничить количество возвращаемых строк и использовать order by.

В зависимости от rdbms вы работаете с синтаксисом может очень, но идея все та же:

Для SQL Server, MS Access и, возможно, некоторых других баз данных используйте TOP:

SELECT TOP 1 SERVICE, COUNT(*)
FROM SUBSCRIBERS 
INNER JOIN SERVICE_SUBSCRIBERS 
    ON SERVICE_SUBSCRIBERS.LINE=SUBSCRIBERS.PORTID
GROUP BY SERVICE
ORDER BY COUNT(*);

Для Oracle используйте offset...fetch next (также работает с сервером sql, начиная с версии 2012)

SELECT SERVICE, COUNT(*)
FROM SUBSCRIBERS 
INNER JOIN SERVICE_SUBSCRIBERS 
    ON SERVICE_SUBSCRIBERS.LINE=SUBSCRIBERS.PORTID
GROUP BY SERVICE
ORDER BY COUNT(*)
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY;

Для MySql используйте Limit:

SELECT SERVICE, COUNT(*)
FROM SUBSCRIBERS 
INNER JOIN SERVICE_SUBSCRIBERS 
    ON SERVICE_SUBSCRIBERS.LINE=SUBSCRIBERS.PORTID
GROUP BY SERVICE
ORDER BY COUNT(*)
LIMIT(1)
0 голосов
/ 05 ноября 2018

В зависимости от вашего конкретного поставщика базы данных, вы можете сделать это:

SELECT SERVICE, CNT FROM (
 SELECT SERVICE, COUNT(*) AS CNT
 FROM SUBSCRIBERS INNER JOIN SERVICE_SUBSCRIBERS ON
 SERVICE_SUBSCRIBERS.LINE=SUBSCRIBERS.PORTID
 GROUP BY SERVICE
) WHERE ROWNUM = 1 ORDER BY CNT DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...