Как использовать для функций - MAX (smthng) и после COUNT (MAX (smthng) - PullRequest
0 голосов
/ 25 марта 2019

Я не понимаю, почему я не могу использовать это в своем коде:

SELECT MAX(SMTHNG), COUNT(MAX(SMTHNG)) 
FROM SomeTable;

Искал ответ, но не нашел его в документации об этих агрегатных функциях.

Также я получаю ошибку SQL-компилятора "Неверное имя столбца" SMTHNG "".

Ответы [ 3 ]

1 голос
/ 25 марта 2019

Вы хотите знать, с каким максимальным значением SMTHNG в таблице:

SELECT MAX(SMTHNG) FROM SomeTable;

Это агрегирование без GROUP BY и, следовательно, в результате получается одна строка, содержащая максимальное значение SMTHNG.

Теперь вы также хотите знать, как часто встречается этот SMTHNG, и добавляете COUNT(MAX(SMTHNG)).Это, однако, не работает, потому что вы не можете агрегировать агрегат напрямую.

Это тоже не работает:

SELECT ANY_VALUE(max_smthng), COUNT(*)
FROM (SELECT MAX(smthng) AS max_smthng FROM sometable) t;

, потому что подзапрос содержит только одну строку, поэтомуслишком поздно для подсчета.

Итак, либо используйте подзапрос и снова выберите из таблицы:

SELECT ANY_VALUE(smthng), COUNT(*)
FROM sometable
WHERE smthng = (SELECT MAX(smthng) FROM sometable);

Или подсчитайте по SMTHNG, прежде чем искать максимум.Вот как можно получить счет:

SELECT smthng, COUNT(*) 
FROM sometable
GROUP BY smthng;

И самый простой способ получить максимум из этого результата:

SELECT TOP(1) smthng, COUNT(*) 
FROM sometable
GROUP BY smthng
ORDER BY COUNT(*) DESC;
0 голосов
/ 25 марта 2019

Прежде всего, пожалуйста, прочитайте мой комментарий.

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

Если вы хотите посчитать самые высокие значения в поле SMTHNG, вы можете попробовать это:

SELECT T1.SMTHNG, COUNT(T1.SMTHNG) 
FROM SomeTable T1 INNER JOIN
    (
        SELECT MAX(SMTHNG) AS A
        FROM SomeTable
    ) T2 ON T1.SMTHNG = T2.A
GROUP BY T1.SMTHNG;
0 голосов
/ 25 марта 2019

используйте cte как ниже или подзапрос

with cte as
(
select count(*) as cnt ,col from table_name
group by col
) select max(cnt) from cte

вы не можете использовать функцию двойного агрегирования одновременно для одного столбца

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...