【问题标题】:MySQL SELECT MAX of SUM() valuesMySQL SELECT MAX of SUM() 值
【发布时间】:2012-11-26 01:29:45
【问题描述】:

我有这个 MySQL 查询:

SELECT 
    SUM(scpe.scpe_estemated_days) AS total_days,
    scp.cpl_startdate
FROM
    studentcourseplanelements scpe
        INNER JOIN
    studentcourseplan scp ON scp.cpl_id = scpe.scpe_cpl_id
        INNER JOIN
    (SELECT 
        sd1.student_id, sd1.student_startdate
    FROM
        studentdates sd1
    WHERE
        sd1.student_id = '360'
    LIMIT 1) sd ON sd.student_id = scp.student_id
GROUP BY scp.cpl_id

这个输出:

+------------+---------------+
| total_days | cpl_startdate |
+------------+---------------+
|          5 | 2012-11-01    |
|        129 | 2012-11-02    |
+------------+---------------+

我只想选择total_days 最高的行,在我的示例中为 129。

我该怎么做?

【问题讨论】:

    标签: mysql sql sum max


    【解决方案1】:

    这将显示具有最高 total_days 的重复记录,例如

    +------------+---------------+
    | total_days | cpl_startdate |
    +------------+---------------+
    |          5 | 2012-11-01    |
    |        129 | 2012-11-02    |  <= shown
    |        129 | 2012-11-03    |  <= shown
    +------------+---------------+
    

    查询

    SELECT  SUM(scpe.scpe_estemated_days) AS total_days,
            scp.cpl_startdate
    FROM    studentcourseplanelements scpe INNER JOIN studentcourseplan scp
                ON scp.cpl_id = scpe.scpe_cpl_id
            INNER JOIN
            (SELECT  sd1.student_id, sd1.student_startdate
             FROM    studentdates sd1
             WHERE   sd1.student_id = '360'
             LIMIT 1) sd ON sd.student_id = scp.student_id
    GROUP BY scp.cpl_id
    HAVING SUM(scpe.scpe_estemated_days) = 
        (
            SELECT MAX(total_days)
            FROM
            (
                SELECT  SUM(scpe.scpe_estemated_days) AS total_days,
                FROM    studentcourseplanelements scpe INNER JOIN studentcourseplan scp 
                             ON scp.cpl_id = scpe.scpe_cpl_id
                        INNER JOIN
                        (SELECT  sd1.student_id, sd1.student_startdate
                         FROM    studentdates sd1
                         WHERE   sd1.student_id = '360'
                         LIMIT 1) sd ON sd.student_id = scp.student_id
                GROUP BY scp.cpl_id
            ) s
        )
    

    【讨论】:

      【解决方案2】:

      尝试添加ORDER BY total_days DESC LIMIT 0,1

      这将按大多数排序,并且只返回最高答案。

      【讨论】:

      • 谢谢!是的,您和斯蒂芬都为我提供了相同的答案,既然您确实是第一个,我会将其标记为答案。但是我必须再等 9 分钟才能这样做:)
      • 是的,您是第一个,但我有一个问题,如果您有两条具有相同 total_days 的记录怎么办?例如5, 2012-01-01, 10, 2012-01-02,10, 2012-01-03 ?
      【解决方案3】:

      基本上,您希望按 SUM 列降序对其进行排序,然后获取列出的第一条记录。 试试这个:

      SELECT 
          SUM(scpe.scpe_estemated_days) AS total_days,
          scp.cpl_startdate
      FROM
          studentcourseplanelements scpe
              INNER JOIN
          studentcourseplan scp ON scp.cpl_id = scpe.scpe_cpl_id
              INNER JOIN
          (SELECT 
              sd1.student_id, sd1.student_startdate
          FROM
              studentdates sd1
          WHERE
              sd1.student_id = '360'
          LIMIT 1) sd ON sd.student_id = scp.student_id
      ORDER BY SUM(scpe.scpe_estemated_days) DESC
      GROUP BY scp.cpl_id
      LIMIT 1 
      

      【讨论】:

      • 谢谢!但是 GROUP BY 出现在 ORDER BY 之前 :)
      • 如果您有两条总天数相同的记录怎么办?例如5, 2012-01-01, 10, 2012-01-02,10, 2012-01-03 ?
      猜你喜欢
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多