Как рассчитать процент для каждой строки суммы СЧЕТА (*) в сгруппированном запросе? - SQL - PullRequest
0 голосов
/ 21 марта 2020

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

Database structure, SQLite

Мне нужно выполнить следующий запрос:

Возвращает SQL строку запроса он найдет спорт, в котором страна выиграла медали. Он должен включать в себя количество медалей с псевдонимом «count», а также процент побед этой страны, представленных этим видом спорта, с псевдонимом «процентов». При желании можно заказать по указанному полю в указанном направлении.

У меня решена часть фильтрации. Для первой части, учитывая страну «Норвегия», у меня есть:

SELECT sport, count(*) as count 
FROM GOLDMEDAL 
WHERE COUNTRY = "Norway" GROUP BY SPORT

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

SELECT SPORT, COUNT(*) as count, 
       (COUNT(*)*100)/(SELECT SUM(COUNT(*)) 
                       FROM GOLDMEDAL 
                       WHERE COUNTRY = "Norway" 
                       GROUP BY SPORT) 
FROM GOLDMEDAL 
WHERE COUNTRY = "Norway" 
GROUP BY SPORT;

РЕДАКТИРОВАТЬ: Решил. вернул все медали, которые страна выиграла по каждому виду спорта. В любом случае, спасибо!

Ответы [ 3 ]

0 голосов
/ 21 марта 2020

Ниже запрос поможет вам удовлетворить требование

select sport,count(*) as count,(count(*)*100)/(Select count(*) from goldmedal where 
country = "Norway") as percent 
from goldmedal where country = "Norway" group by sport;
0 голосов
/ 21 марта 2020

Лучший способ сделать это - использовать оконные функции, а не подзапросы:

SELECT sport, COUNT(*) as count,
       (COUNT(*) * 100.0 / SUM(COUNT(*)) OVER ()) as percent
FROM GOLDMEDAL 
WHERE COUNTRY = 'Norway'
GROUP BY SPORT
ORDER BY percent DESC;
0 голосов
/ 21 марта 2020

Вы можете использовать ниже запрос -

SELECT SPORT,
       COUNT(*) as count,
       (COUNT(*)*100)/(SELECT COUNT(*) FROM GOLDMEDAL) as percent
FROM GOLDMEDAL
WHERE COUNTRY = "Norway"
GROUP BY SPORT;
...