mysql - MySQL中如何对子查询求和

标签 mysql

我有以下完美运行的 MySQL 语句。不过,我现在需要如下粗体方括号/圆括号中指定的总数。

SELECT f.fid, r.tid, r.tbd, r.tbc, r.tc, r.tname, r.category,
      SUM(`time`) AS `totaltime`,
      SUM(`points`) AS `points`,
      (SELECT IFNULL(SUM(points),0) FROM Primes WHERE zid = r.zid AND wid = r.wid AND s_id = 38) AS `cl`,
      (SELECT IFNULL(SUM(points),0) FROM Primes WHERE zid = r.zid AND wid = r.wid AND s_id = 34) AS `sp`,

      **[sum points + climb + sprint] AS pointstotal**

      FROM teams f
      JOIN results r
      ON f.wid = r.wid
      WHERE r.rank <= 3 AND r.id = '254293' AND r.category = 'C'
      AND r.fin = '1'
      GROUP BY f.fid
      ORDER BY pointstotal DESC

我尝试了许多不同的排列等以及其他问题中的多个引用,但我就是无法让它发挥作用。

最佳答案

最简单的方法是将查询移动到子查询中,然后添加这些列。

SELECT fid, tid, tbd, tbc, tc, tname, category, totaltime, 
        points, cl, sp, points + cl + sp AS pointstotal
FROM (
    SELECT f.fid, r.tid, r.tbd, r.tbc, r.tc, r.tname, r.category,
          SUM(`time`) AS `totaltime`,
          SUM(`points`) AS `points`,
          (SELECT SUM(points) FROM Primes WHERE zid = r.zid AND wid = r.wid AND s_id = 38) AS `cl`,
          (SELECT SUM(points) FROM Primes WHERE zid = r.zid AND wid = r.wid AND s_id = 34) AS `sp`
    FROM teams f
    JOIN results r
    ON f.wid = r.wid
    WHERE r.rank <= 3 AND r.id = '254293' AND r.category = 'C'
    AND r.fin = '1'
    GROUP BY f.fid
) AS x
ORDER BY pointstotal DESC

但我通常不喜欢相关子查询,我更喜欢连接,然后你就不需要另一个级别了

SELECT SELECT f.fid, r.tid, r.tbd, r.tbc, r.tc, r.tname, r.category,
        SUM(time) AS totaltime, SUM(points) AS points,
        cl, sp, SUM(POINTS) + cl + sp AS totalpoints
FROM teams AS f
JOIN results AS r ON f.wid = r.wid
JOIN (
    SELECT zid, wid, SUM(IF(s_id = 38, points, 0)) AS cl, SUM(IF(s_id = 34, points, 0)) AS sp
    FROM Primes
    GROUP BY zid, wid
) AS p ON p.zid = r.zid AND p.wid = r.wid
WHERE r.rank <= 3 AND r.id = '24293' AND r.category = 'C' AND r.fin = '1'
GROUP BY f.fid
ORDER BY pointstotal DESC

关于mysql - MySQL中如何对子查询求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59403316/

相关文章:

php - 用户在 php 中的动态表单?

mysql - Grails 中非法混合排序规则 (cp1251_general_ci,IMPLICIT) 和 (latin1_swedish_ci,COERCIBLE)

php - 数据库连接问题

mysql - 带有 count() 和位置的 SQL 请求

mysql - 将列转换为行

MySQL - 解析数据并将其从表1移动到表2

mysql - 使用 HikariCP 和 Slick 管理 MySQL 连接

php - LIKE 和 NOT 运算符 - 没有预定单词的字符串的条件

MySQL 社区版

python - 更新 Django 站点时如何维护用户数据?