2017-07-24 76 views
1

得到总和我有一个表在MySQL联盟所有3个SUM查询,从同一个表和相同的列,但不同的条款

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

我试图找出合适的查询来获取SUM的结果列的PTS,其中列球队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),结果......

+0

'SELECT SUM(pts)FROM my_table WHERE team_id = 1;'顺便说一句,名为stats_2016/2017之类的表往往是设计不佳的症状 – Strawberry

回答

0

三个转变:

  1. 分配的别名联视图(派生表)
  2. 分配的别名在共线视图的第一个SELECT表达。 (即别名将在派生表在外部查询中使用的列名。(
  3. ,通过所分配的别名引用在共线视图的列。

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.--^
0

尝试集团通过IN mysql的运营商,这与动态值team_id
像这样

工作
SELECT SUM(pts) FROM `stats_2016/2017` WHERE `competition` in ('zc','po','sp') 
group by `team_id` 
相关问题