如何使用函数-MAX(smthng)和COUNT(MAX(smthng)之后

时间:2019-03-25 06:59:07

标签: sql sql-server

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

 public string ITEM_ID { get; set; }
        public string ITEM_NAME { get; set; }
    public string COMMENT { get; set; }
        public string PRIORITY { get; set; }
        public string ITEM_ID { get; set; } 

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

像下面那样使用cte或子查询

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

您不能在同一列上一次使用双聚合函数

答案 2 :(得分:0)

首先,请阅读我的评论。

根据您要实现的目标,必须更改该语句。

如果您想计算ClassTag[T]字段中的最大值,则可以尝试以下操作:

SMTHNG