联盟所有3个SUM查询,从同一个表和相同的列,但不同的条款
问题描述:
得到总和我有一个表在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),结果......
答
三个转变:
- 分配的别名联视图(派生表)
- 分配的别名在共线视图的第一个SELECT表达。 (即别名将在派生表在外部查询中使用的列名。(
- ,通过所分配的别名引用在共线视图的列。
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.--^
答
与尝试集团通过和IN mysql的运营商,这与动态值的team_id
像这样
SELECT SUM(pts) FROM `stats_2016/2017` WHERE `competition` in ('zc','po','sp')
group by `team_id`
'SELECT SUM(pts)FROM my_table WHERE team_id = 1;'顺便说一句,名为stats_2016/2017之类的表往往是设计不佳的症状 – Strawberry