Извините за беспокойство, но я застрял в SQLite запросов :(SQL-запрос с COALESCE и LEFT OUTER JOIN
У меня есть таблица:
sport country place type
ski swe 1 1
ski nor 2 1
ski rus 3 1
luge swe 1 1
luge usa 2 1
luge ger 3 1
bob nor 1 1
bob rus 2 1
bob ger 3 1
, где место есть 1 золото, 2 для серебра, 3 бронзы для
Теперь нормальное отображение сценарий представляет собой список стран, первый максимум золота, то серебро, то бронза для этого примера это будет:.
swe g:2 s:0 b:0 sum:2
rus g:0 s:1 b:1 sum:2
usa g:0 s:1 b:0 sum:1
nor g:0 s:0 b:2 sum:2
делать, что я делаю:
select
country,
sum(case when place = 1 then 1 else 0 end) as gold,
sum(case when place = 2 then 1 else 0 end) as silver,
sum(case when place = 3 then 1 else 0 end) as bronce,
count(*) as allmedals
from
results
group by
country
order by
gold DESC, silver DESC, bronce DESC
Это работает до сих пор. Но у меня есть другая таблица «страны», полное имя, короткое имя и некоторый «тип».
[name] [short]
usa USA
germany GER
russia RUS
norway NOR
poland POL
Я хочу объединить таблицы «результаты» и «страны», так что у меня есть список всех из них из таблицы «стран», и если нет никаких результатов там, то его просто 0. поэтому я попытался:
SELECT
c.name as c_name,
COALESCE(sum(case when r.place = 1 then 1 else 0 end), 0) as gold,
COALESCE(sum(case when r.place = 2 then 1 else 0 end), 0) as silver,
COALESCE(sum(case when r.place = 3 then 1 else 0 end), 0) as bronce
FROM
countries AS c
LEFT OUTER JOIN
results AS r ON c.short = r.country
WHERE
r.type = 1
GROUP BY
r.country
ORDER BY
gold DESC, silver DESC, bronce DESC, c.name DESC"
Но проблема, я вижу только список стран, которые имеют ряд в таблице «результаты». Я думаю, что его из-за "r.type = 1"
!! !!!! Это решение !!!!!! На самом деле я не знал, что разрешено выполнять несколько операций в рамках JOIN. Большое спасибо. – user1908375
Нет, это не работает !!! Он показывает только одну строку после строк с результатами! – user1908375
Я не понимаю, что «Нет, это не работает !!! Он показывает только ОДИН ряд за строками с результатами!» означает. – Gratzy