【发布时间】:2014-06-04 22:56:51
【问题描述】:
假设我有 3 张桌子:
球员 +--------+-------+ |编号 |姓名 | +--------+-------+ | 1 |本 | | 2 |比尔 | | 3 |约翰 | | 4 |休 | | 5 |弗雷德 | +--------|-------+ 游戏1 游戏2 +-----+-------+ +------+--------+ | p_id |积分| | p_id |积分| +-----+-------+ +------+--------+ | 1 | 800 | | 1 | 300 | | 1 | 400 | | 5 | 800 | | 2 | 100 | | 2 | 900 | | 3 | 1000 | | 4 | 1200 | +--------|-------+ +------|--------+我想将两个表中的总点数相加,按 p_ID 分组,其中总和大于一定数量,例如 1000。所以我希望结果看起来像这样。
查询结果 +--------+---------+---------+--------+ | p_id |积分1 |点2 |总计| +--------+---------+---------+--------+ | 1 | 1200 | 300 | 1500 | | 2 | 100 | 900 | 1000 | | 3 | 1000 | 0 | 1000 | | 4 | 0 | 1200 | 1200 | +--------|---------+---------+--------+以下是我当前的查询,但没有得到我需要的结果。
SELECT `players`.`p_id`,
COALESCE(sum(`Game1`.`points`), 0) as 'Game1',
COALESCE(sum(`Game2`.`points`), 0) as 'Game_2',
COALESCE(sum(`Game1`.`points`), 0) + COALESCE(sum(`Game2`.`points`), 0) as 'total'
from `players`
left join `Game1` on `players`.`p_id`=`Game1`.`p_id`
left join `Game2` on `players`.`p_id`=`Game2`.`p_id`
having sum(`Game2`.`points`) + sum(`Game1`.`points`) >= 1000
order by sum(`Game1`.`points`) +
sum(`Game2`.`points`) desc
【问题讨论】:
-
你是不是忘了
GROUP BY players.p_id? (MySQL 允许您省略它,通常会产生意想不到的结果,许多其他 RDBMS 只会出错) -
这听起来不像有条款吗?