/ / Dołącz do tabel, aby znaleźć SUM dla dostępnych punktów i ukończonych punktów - sql, sqlite

Dołącz do tabel, aby znaleźć SUM dla dostępnych punktów i ukończonych punktów - sql, sqlite

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 № 1

Jeś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