Mam trzy stoły: Tabela Osiągnięcia, Postacie i Osiągnięcia Postaci, które przechowują „ID” ukończonych osiągnięć i identyfikator użytkownika. Chcę uzyskać każdą kategorię, całkowitą liczbę możliwych punktów, a także liczbę uzupełnioną.
Jestem w stanie uzyskać każdą kategorię i liczbę możliwych punktów, ale nie mogę również odzyskać pełnej liczby punktów.
Obecnie używam tego, aby uzyskać każdą kategorię i możliwą liczbę punktów
SELECT achievements.category, SUM(points) AS Total
FROM achievements
GROUP BY achievements.category ORDER BY achievements._id asc
Dostaję te wyniki.
Category Total
Operations 50
Events 25
Mogę również uzyskać liczbę punktów ukończonych
SELECT achievements.category, SUM(points) AS Completed
FROM achievements
LEFT JOIN character_achievements
ON character_achievements.achievements_id = achievements._id
LEFT JOIN character
ON character_achievements.character_id = character._id
WHERE character._id = "1"
co zwraca to, ale tylko kategorie, które są wypełnione. Jak połączyć te dwa zapytania razem. Kategoria ukończona Operacje 50 Wydarzenia 25
Próbowałem UNION, ale nie zwraca wyników, których potrzebuję. Oto moje przykładowe tabele
Tabela osiągnięć
Category Title Points
Operations Epic Enemies 25
Operations Explosive Conflict 25
Events Bounty Contract 25
Tabela Osiągnięć
Character Character_id Achievements_id
Operations 1 1
Events 1 3
Wyniki, których szukam, chcieliby tego.
Wyniki
Category Completed Total
Operations 25 50
Events 25 25
jestem w stanie
Odpowiedzi:
0 dla odpowiedzi № 1Jeśli dobrze rozumiem twoje pytanie, możesz użyć SUM
z CASE
:
SELECT a.category,
SUM(CASE WHEN ca.achievements_id is not null then points end) AS Completed,
SUM(points) Total
FROM achievements a
LEFT JOIN character_achievements ca
ON ca.achievements_id = a._id
GROUP BY a.category
ORDER BY a._id asc