获取MySQL中GROUP BY结果的百分比值

时间:2009-09-23 16:15:20

标签: mysql sql group-by

我正在处理调查数据。从本质上讲,我想计算一个位置问题的总回答,然后使用该总数来创建每个特定响应的所有响应的百分比。然后我想按位置对结果进行分组。

理想的输出类似于:

  

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

我相信使用WITHOVER(PARTITION BY...)可能会成为一种途径,但我无法继续工作。

2 个答案:

答案 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)