首页 > 解决方案 > 如何使用函数 - MAX(smthng) 和 COUNT(MAX(smthng) 之后

问题描述

我不明白为什么我不能在我的代码中使用它:

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

搜索了答案,但在有关这些聚合函数的文档中没有找到它。

我还收到一个 SQL 编译器错误“无效的列名“SMTHNG””。

标签: sqlsql-server

解决方案


您想知道表中的最大 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;

推荐阅读