【问题标题】:MAX() and SUM() in one queryMAX() 和 SUM() 在一个查询中
【发布时间】:2013-12-05 00:39:07
【问题描述】:

我有这张桌子

dept | amount | price
   1 |      2 | 20
   3 |      2 | 50
   4 |      3 | 10
   2 |      5 | 20
   1 |      1 | 15
   4 |      1 | 30
   4 |      6 |  5
   2 |      7 |  7
   1 |      1 | 24
   2 |      5 | 12

dept 是部门编号 数量是销售了多少产品。 price 是产品的价格是多少

我怎样才能找到通过销售他们的产品获得最多收入的部门。

我有这个:

SELECT dept, SUM( amount * price ) AS total
FROM table
GROUP BY dept

我需要它返回具有最高 totaldept。 我不能使用 MAX(SUM(amount * price)),我该怎么做呢?

哦,是的。这是学校作业,我不能使用 LIMIT 或 ORDER BY

【问题讨论】:

  • 你使用的是什么 dbms?
  • 那么 juergen 的答案就是你要找的东西
  • 他正在使用限制。我可能不会使用限制 1。
  • 我们为什么要做你的功课?我们会得到荣誉吗?

标签: mysql sql sum max


【解决方案1】:

不使用 LIMIT 你可以尝试使用 HAVING:

SELECT dept,SUM(amount * price) AS total
FROM tab1
GROUP BY dept
HAVING SUM(amount * price) = (
    SELECT MAX(total)
    FROM (
      SELECT SUM(amount * price) AS total
      FROM tab1
      GROUP BY dept
      ) a
    )

sqlfiddle demo

【讨论】:

  • 你对我有同样的解决方案。我们同时编辑,同样的想法。
  • 如果有两个部门的总数相同,我们的查询可能不会返回单行。在这种情况下,我们可能不得不使用 LIMIT 1。
【解决方案2】:

如果您不想使用 ORDER 和 LIMIT。这是一个解决方案(已测试)

SELECT dept, SUM( amount * price ) AS total
FROM table
GROUP BY dept
HAVING SUM( amount * price ) = ( SELECT MAX(A.total)
                                 FROM
                                 (
                                     SELECT dept, SUM( amount * price ) AS total
                                     FROM table
                                     GROUP BY dept
                                  ) A
                                )

【讨论】:

    【解决方案3】:

    这将为您提供总数最高的部门:

    select top 1 dept, sum(amount * price)
    from table
    group by dept
    order by sum(amount * price) desc
    

    【讨论】:

    • 刚看到juergen的回答...以上是针对MSSQL的
    【解决方案4】:

    您可以按总降序排序并取第一个条目

    SELECT dept, SUM( amount * price ) AS total 
    FROM table 
    GROUP BY dept
    order by total desc
    limit 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多