【问题标题】:sql query maximum cummulativesql查询最大累积
【发布时间】:2020-07-24 21:35:37
【问题描述】:

我在mysql中有表A

+-------------------------+
| ID  Name Month  Salary  |
+-------------------------+
| 1  Joe   4      300     |
| 2  Kim   3     100      |
| 3  Moko  2     150      |
| 4   Loli  5     80      |
| 5  Tom   3    400       |
+-------------------------+

我如何根据月份和获得最高工资的人获得工资总数

示例

Joe = 4*300 = 1200
Kim = 300
Moko = 300
Loli = 400
Tom = 1200

输出将是:1200, 2

1200 是最高工资,2 人是 Joe 和 Tom 获得的工资

【问题讨论】:

  • 请用您正在使用的数据库标记您的问题:mysql、oracle、sql-server...?
  • 已经编辑了我的问题

标签: mysql sql max cumulative-sum


【解决方案1】:

尝试如下使用子查询

    select max(salary),count(*) from (select name, sum(Month*Salary) as salary
    from data    group by name
    ) b where b.salary= 

   (select max(salary) from
   (select sum(Month*Salary) as salary
    from data    group by name
    )b
    )

Demo link

【讨论】:

    【解决方案2】:
    SELECT Month*Salary, COUNT(*)
    FROM A WHERE Month*Salary = (SELECT MAX(Month*Salary)
                                 FROM A)
    

    第二个查询将为您提供获得的最高总工资,然后您可以过滤表 A 中的条目,其中 Month*Salary 等于该金额。

    【讨论】:

      【解决方案3】:

      您可以在子查询中计算所有total 薪水,然后计算每个total 值的出现次数,按total 降序排列,LIMIT 1 限制为最大值:

      SELECT total, COUNT(*) AS num
      FROM (
        SELECT Month * Salary AS total
        FROM data
      ) t
      GROUP BY total
      ORDER BY total DESC
      LIMIT 1
      

      输出:

      total   num
      1200    2
      

      Demo on SQLFiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 2011-12-16
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多