#sql #sql-server #tsql
Вопрос:
SELECT sex, SUM(total) AS total FROM (SELECT games, sex, COUNT(sex) AS total FROM dbo.athlete_events$ GROUP BY sex, games -- ORDER BY 1 ) a GROUP BY sex
Как я могу сделать запрос, который даст мне соотношение мужчин и женщин? В этом примере результат должен быть 196594/74522, то есть 2,64.
Комментарии:
1. Вы хотите получить результат 122072 ?
2. Я хочу получить результат 2,64
Ответ №1:
Вы можете попытаться опираться на следующее:
select Sum(Iif(sex='M',1.0,0)) / Sum(Iif(sex='M',0,1.0)) from dbo.athlete_events$
Обратите внимание на использование 1.0
в противном случае вы бы просто получили целочисленное деление.
Ответ №2:
Вы могли бы попробовать:
select sum(case when sex='F' then 1.0 else 0.0 end) / sum(case when sex='M' then 1.0 else 0.0 end) from (... your subquery...)
Ответ №3:
Использование с было бы полезно для этого запроса
WITH t AS ( --- your query in parenthesis SELECT games, sex, COUNT(sex) AS total FROM dbo.athlete_events$ GROUP BY sex, games ) SELECT t1.sex, t1.total, t2.sex, t2.total, CAST(t1.total AS float) / t2.total AS ratio_of_Male_to_Female FROM t t1 LEFT JOIN t t2 ON t1.games = t2.games WHERE t1.sex = 'M' AND t2.sex = 'F'