【问题标题】:How to use to functions - MAX(smthng) and after COUNT(MAX(smthng)如何使用函数 - MAX(smthng) 和 COUNT(MAX(smthng) 之后
【发布时间】:2019-08-15 09:20:00
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您在哪里找到该查询?你知道那个查询的目的吗?您知道该查询无法运行吗?或者如果这是您编写的查询,那么您编写它的目的是什么?您能否提供示例输入和预期输出?
  • 更新您的问题并添加适当的数据样本和预期结果..(您的代码不清楚)
  • 想象一下,COUNT(MAX(SMTHNG)) 将返回1,因为MAX 函数返回SMTHNG 字段的最大值;) 所以,这个语句没有意义。
  • 你想达到什么目的?您的查询不完整
  • 好的,好的,我知道我不能在“第一次选择”的一个字符串中使用 2 个聚合函数。

标签: sql sql-server


【解决方案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;

【讨论】:

    【解决方案2】:

    首先,请阅读我的评论。

    根据您要达到的目标,必须更改声明。

    如果你想计算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;
    

    【讨论】:

    • 超级!所以,请接受我的回答作为解决方案(如果你愿意,请投票)。
    • Ups,不 - 我无法理解的问题出在哪里 - 我尝试输出 MAx(salarymonths) 并计算它是否等于 2 或更多 LIKE MAx(salary i>months) = 1-st - 100500 和 2-en 100500 所以 COUNT(MAX(salry*months) = 2.
    • 这是另一个问题,原始问题中没有表达。您需要做的就是计算薪水最高的月份;)您可以通过更改内部联接来实现这一点。请注意,我看不到您的数据,也无法在您的脑海中阅读或直接从您的屏幕上阅读。
    • 我的英语不好,所以我写了一个简短的 - 我明白我不需要在一个语句中编写几个聚合函数,所以我看看它是如何做其他人并实现我自己的。 TY 给你答案。
    【解决方案3】:

    使用下面的 cte 或子查询

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

    你不能在同一列上同时使用双重聚合函数

    【讨论】:

    • 抱歉,我认为您误解了这个问题。请看我的回答。
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多