【问题标题】:Using Max and Sum for the same column without subquery -Mysql对没有子查询的同一列使用 Max 和 Sum -Mysql
【发布时间】:2016-09-03 13:00:13
【问题描述】:

我是 Mysql 新手,我想同时使用 sum(Max(column)) ?

我不知道为什么它无法使用?

而 count(Distinct(column)) 是可能的,即一起使用两个聚合函数

【问题讨论】:

  • 你尝试过什么吗?给我们看代码
  • @ZaidMirza 我试过了,即使是基本查询它也不会工作,唯一的解决方案是子查询
  • Distinct 不是函数(聚合或其他)

标签: mysql sql


【解决方案1】:

原因是 SUM() 和 MAX() 都是聚合函数,这些函数通过对表中的输入进行分组来返回结果。在将一个聚合函数应用于另一个聚合函数时,这类似于将数据分组到另一个分组函数的结果集,这在 SQL 中是不允许的。

但是在 SQL Server 中,从 2008 版本开始引入了一个新的子句 OVER(),以便我们可以在该特定列的 over 子句中指定分组条件。

在不需要任何分组的 DISTINCT 的情况下,它会拉取我们正在应用聚合函数的不同记录集。这样就可以了。

【讨论】:

    【解决方案2】:

    您可以按以下方式执行,但如果您不使用其他分组列,则它始终返回 1 列,因此 SUM(MAX(tot)) = MAX(tot) 尽管我们不允许在同一个地方执行此操作:

    SELECT SUM(total) tot FROM (
    SELECT 
        MAX(quantity) total 
        FROM deliveries) t;
    

    【讨论】:

    • @S Bohara 但我在问它不支持的原因,我对替代解决方案很满意
    【解决方案3】:

    DISTINCT 不是聚合函数。它是一个关键字,一个基本命令。

    在您的情况下,当您从组中获取 MAX 时,您将获得一个值。 SUM 单个值没有意义。

    如果你想要 SUM 来自所有现有组的 MAX 值,你可以这样尝试:

    SELECT SUM(<column>)
    FROM <table> t
    WHERE NOT EXISTS
      (
        -- filter all max values from each group
        SELECT 1
        FROM <table> d
        WHERE 1=1
          AND d.<group_column1> = t.<group_column1>
          AND d.<group_column2> = t.<group_column2>
          ... 
          AND d.<column> > t.<column>
      )
    

    【讨论】:

    • 我可以在使用 Max 和 group by function 时获得更多值 select max(column_name ) from table group by column2 //对于每个组,它会找到最大值并给我们
    • 所以我需要总结这些值
    • 为什么您的查询中有WHERE 1=1?它有什么用?
    • 在开发 SQL 时,我注释掉了很多 WHERE 过滤器,在注释掉第一个/最后一个过滤器时,我不希望删除其下一个/上一个 AND 的“额外工作”运算符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多