联合所有3个SUM查询以从相同的表和相同的列获得总和但具有不同的子句

时间:2017-07-24 16:14:54

标签: php mysql sum union

我在mysql中有一个表

==================================================
          ID     | TEAM_ID |  PTS | COMPETITION
==================================================
          1      | 1       | 10   | zc
--------------------------------------------------
          2      | 1       | 15   | po
--------------------------------------------------
          3      | 1       | 5    | sp

我试图找出正确的查询来获得列PTS的SUM结果,其中列团队ID等于1.这就是我所拥有的

SELECT SUM(pts) FROM 
(SELECT SUM(pts) FROM `stats_2016/2017` WHERE `team_id`='1' AND `competition`='zc'
UNION ALL
SELECT SUM(pts) FROM `stats_2016/2017` WHERE `team_id`='1' AND `competition`='po'
UNION ALL
SELECT SUM(pts) FROM `stats_2016/2017` WHERE `team_id`='1' AND `competition`='sp'
)

我想得到30(10 + 15 + 5)...

的结果

2 个答案:

答案 0 :(得分:0)

三个变化:

  1. 为内联视图(派生表)
  2. 分配别名
  3. 在内联视图的第一个SELECT中为表达式指定别名。 (该别名将用于派生表中的列名。(
  4. 外部查询中的
  5. ,通过指定的别名引用内联视图中的列。
  6.   SELECT SUM(v.totpts) AS totpts 
    -- 3.--        ^^^^^^ 
        FROM ( SELECT SUM(pts) AS totpts FROM `stats_2016/2017` ...
    -- 2.--                    ^^ ^^^^^^
                UNION ALL
               SELECT SUM(pts) FROM `stats_2016/2017` ...
           ) v
    -- 1.--  ^
    

答案 1 :(得分:0)

尝试使用分组依据 IN mysql运算符,该运算符使用team_id动态值 喜欢这个

SELECT SUM(pts) FROM `stats_2016/2017` WHERE  `competition` in ('zc','po','sp') 
group by `team_id`