我正在处理调查数据。从本质上讲,我想计算一个位置问题的总回答,然后使用该总数来创建每个特定响应的所有响应的百分比。然后我想按位置对结果进行分组。
理想的输出类似于:
Q1 |国家|城市| %
是| MA | bos | 10
没有| MA | bos | 40
米。 | MA | bos | 50
是| MA | cam | 20
没有| MA | cam | 20
米。 | MA | cam | 80
我遇到的问题(我相信)是GROUP BY
在我的count
声明之前工作,所以我无法计算所有的回复。下面是我必须产生实数的一个例子:
SELECT q1, state, city, COUNT(q1) FROM master GROUP BY state, city, q1
并非所有问题都有回复,所以下面是我尝试获得百分比:
SELECT q1, state, city, count(q1)/(count(nullif(q1,0))) as percent FROM master group by state, city, q1
我相信使用WITH
或OVER(PARTITION BY...)
可能会成为一种途径,但我无法继续工作。
答案 0 :(得分:1)
我认为查询需要分两部分。一个得到每个州+城市的计数加上另一个得到每州+城市+ Q1的计数。然后,将这两个查询连接在一起,并对组合结果进行计算。可能有一个比这更优雅的解决方案,但沿着这些方面的东西也许可行。为任何错别字道歉!
select t1.q1, t1.state, t1.city, ResponseCount, 100.0 * ResponseCount/CityCount as "%" from (select q1, state, city, count(q1) as ResponseCount from master group by state, city, q1) t1 join (select state, city, count(*) as CityCount from master group by state, city) t2 on t2.State = t1.State and t2.City = t1.City
希望这会有所帮助。
答案 1 :(得分:0)
GROUP BY state, city, COUNT(q1)