Столбцы суммы MySQL из двух запросов

0

Ссылка sqlfiddle

Я работаю над создателем брони, где персонаж может обладать навыками как на доспехах, так и на прелестях, и я пытаюсь их подвести, чтобы пользователь знал общее количество выбранных вами предметов. У меня есть запрос, который суммирует броню и запрос, который суммирует заклинания, но мне нужен способ их комбинирования. Вот что я имею до сих пор:

Запрос, чтобы получить навыки брони:

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

Я могу объединить два запроса вместе следующим образом:

(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);

Что возвращает:

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
Теги:
database

1 ответ

1
Лучший ответ

Я думаю, что ваш вопрос аналогичен этому сообщению Group by with union mysql select query. Используйте оболочку выбора вокруг вашего объединения (используйте все соединения), начиная с как видно в сообщении с группой в конце. Я не тестировал его, но он должен быть похож на следующее.

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;
  • 0
    Работает отлично! Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню