MySQL对两个查询中的列求和

MySQL对两个查询中的列求和,mysql,database,Mysql,Database,我正在开发一个护甲构建器应用程序,其中角色可以同时拥有护甲和护身符技能,我正在尝试对它们进行总结,以便用户知道他们选择的护甲和护身符的总数。我有一个求和盔甲的查询和一个求和魅力的查询,但我需要一种方法来组合它们。以下是我到目前为止的情况: 获取护甲技能的查询: SELECT skills.id AS skillId, skills.name as skillName, SUM(armor_skills.ranks) as ranks from skills INNER JOIN armor_sk

我正在开发一个护甲构建器应用程序,其中角色可以同时拥有护甲和护身符技能,我正在尝试对它们进行总结,以便用户知道他们选择的护甲和护身符的总数。我有一个求和盔甲的查询和一个求和魅力的查询,但我需要一种方法来组合它们。以下是我到目前为止的情况:

获取护甲技能的查询:

SELECT skills.id AS skillId, skills.name as skillName, SUM(armor_skills.ranks) as ranks from skills
INNER JOIN armor_skills ON armor_skills.skill_id = skills.id
WHERE armor_skills.armor_id in (457,458,459,460,461)
GROUP BY skillId, skillName;
返回:

7  | Skill One    | 3
39 | Skill Two    | 5
63 | Skill Three  | 1
71 | Skill Four   | 1
76 | Skill Five   | 3
然后我有了这个查询来获得魅力技能:

SELECT skills.id AS skillId, skills.name AS skillName, SUM(skill_ranks.rank) AS ranks FROM charm_skills
INNER JOIN charm_ranks ON charm_skills.charm_rank_id = charm_ranks.id
INNER JOIN skills ON charm_skills.skill_id = skills.id
INNER JOIN skill_ranks ON skills.id = skill_ranks.skill_id AND charm_ranks.rank = skill_ranks.rank
WHERE charm_ranks.id = 57
GROUP BY skillId, skillName;
返回:

39 | Skill Two | 3
7  | Skill One    | 3
39 | Skill Two    | 5
63 | Skill Three  | 1
71 | Skill Four   | 1
76 | Skill Five   | 3
39 | Skill Two    | 3
我可以这样将两个查询合并在一起:

(SELECT skills.id AS skillId, skills.name AS skillName, SUM(armor_skills.ranks) AS ranks FROM skills
INNER JOIN armor_skills ON armor_skills.skill_id = skills.id
WHERE armor_skills.armor_id IN (457,458,459,460,461)
GROUP BY skillId, skillName)
UNION
(SELECT skills.id AS skillId, skills.name AS skillName, SUM(skill_ranks.rank) AS ranks FROM charm_skills
INNER JOIN charm_ranks ON charm_skills.charm_rank_id = charm_ranks.id
INNER JOIN skills ON charm_skills.skill_id = skills.id
INNER JOIN skill_ranks ON skills.id = skill_ranks.skill_id AND charm_ranks.rank = skill_ranks.rank
WHERE charm_ranks.id = 57
GROUP BY skillId, skillName);
返回:

39 | Skill Two | 3
7  | Skill One    | 3
39 | Skill Two    | 5
63 | Skill Three  | 1
71 | Skill Four   | 1
76 | Skill Five   | 3
39 | Skill Two    | 3
但我想得到:

7  | Skill One    | 3
39 | Skill Two    | 8
63 | Skill Three  | 1
71 | Skill Four   | 1
76 | Skill Five   | 3

我认为你的问题与这篇文章类似。在联合体周围使用select包装器使用union all with from,如文章末尾的group by所示。我没有测试它,但它应该类似于下面的内容

SELECT skillId, skillName, SUM(ranks) from 
((SELECT skills.id AS skillId, skills.name AS skillName, 
SUM(armor_skills.ranks) AS ranks FROM skills INNER JOIN armor_skills ON 
armor_skills.skill_id = skills.id WHERE armor_skills.armor_id IN 
(457,458,459,460,461) GROUP BY skillId, skillName) 
UNION ALL 
(SELECT skills.id AS skillId, skills.name AS skillName, SUM(skill_ranks.rank) AS 
ranks FROM charm_skills INNER JOIN charm_ranks ON charm_skills.charm_rank_id 
= charm_ranks.id INNER JOIN skills ON charm_skills.skill_id = skills.id 
INNER JOIN skill_ranks ON skills.id = skill_ranks.skill_id AND 
charm_ranks.rank = skill_ranks.rank WHERE charm_ranks.id = 57 GROUP BY 
skillId, skillName)) t 
GROUP BY skillId,skillName;

工作完美!非常感谢。