[英]Calculate percentage for each value of a column sql
我想重写此sql查询,以便在没有匹配项的情况下,他显示对应年龄范围的0记录,并且我希望他现在计算Member的每个值的百分比而不是“ 0”,任何人都可以帮助我如何实现这一目标?
SELECT COUNT(Name) * 100 /
(select COUNT(*) from 'cities'
WHERE city= 'Hoeselt' AND Member = '0' ) AS 'perc',
CASE
WHEN age <= 30 THEN '18-30'
WHEN age <= 50 THEN '31-50'
ELSE '50+'
END AS age, COUNT(*) AS n
FROM 'cities'
WHERE city= 'Hoeselt' AND elected='yes' AND Member= '0'
GROUP BY CASE
WHEN age <= 30 THEN '18-30'
WHEN age <= 50 THEN '31-50'
ELSE '50+'
END
很难确定如果没有DDL,这将对您有效。 这是帮助人们为您提供最佳解决方案的好工具。 http://sqlfiddle.com/#!6
;WITH AgeCat AS
(
SELECT MinAge = 18
,MaxAge = 30
,Descr = '18-30' UNION ALL
SELECT 31, 49, '31-49' UNION ALL
SELECT 50, 200, '50+'
)
SELECT DISTINCT
C.Descr
,Perc = COUNT(*) OVER (PARTITION BY 0) / COUNT(*) OVER (PARTITION BY A.Descr) * 100
FROM AgeCat A
JOIN Cities C ON C.Age BETWEEN A.MinAge AND A.MaxAge
WHERE city = 'Hoeselt'
AND elected = 'yes'
AND Member = '0'
我的解决方法是使用CTE定义年龄组。 接下来,选择所有年龄组作为“驱动程序”表,并加入城市信息。 然后,即使没有匹配项,您也可以使用年龄段:
with c as (
select c.*,
(CASE WHEN age <= 30 THEN '18-30'
WHEN age <= 50 THEN '31-50'
ELSE '50+'
END) as agegrp
from cities
)
select COUNT(Name) * 100 / (select COUNT(*) from cities WHERE city= 'Hoeselt' AND Member = '0') as perc,
driver.agegrp,
COUNT(*) as n
from (select distinct agegrp from c) as driver left outer join
c
on driver.agegrp = c.agegrp
group by driver.agegrp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.