根据> 1列获取列的百分比

时间:2016-07-08 12:05:40

标签: mysql percentage

我有一个从查询中返回的模式

+------------+-------------+------------+---------+------+
| dt         | country     | city       | gender  | cnt  |
+------------+-------------+------------+---------+------+
| 2016-07-06 | algeria     | a1         | female  |  187 |
| 2016-07-06 | algeria     | a1         | gents   | 1045 |
| 2016-07-06 | algeria     | a2         | female  |  212 |
| 2016-07-06 | algeria     | a2         | gents   |  775 |
+------------+-------------+------------+---------+------+

查询导致上述查询的结果:

select DATE(created) as dt,country, city, gender, count(gender) as cnt 
from my_table 
where created>'2016-07-06 00:00:00'
group by dt,country,city, gender

预期结果(每个县每个城市的最后一栏中的女性比例)

+------------+-------------+------------+----------+
| dt         | country     | city       | f_ratio  |
+------------+-------------+------------+----------+
| 2016-07-06 | algeria     | a1         |  0.151   |
| 2016-07-06 | algeria     | a2         |  0.214   |
+------------+-------------+------------+----------+

我试过这个:

select dt as date, (cnt / sum(cnt) * 100) as f_ratio from (
  select DATE(created) as dt, gender, count(gender) as cnt 
  from count_table 
  where created>'2016-07-06 00:00:00'
  group by dt, gender
) as inner_t
group by dt;

但在基于2列计算百分比时,它失败了。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

可能是这样的

SELECT T.dt as date,T.country,T.City,T.cnt / S.Tot AS f_ratio  
FROM (
       SELECT DATE(created) as dt,country, city, gender, count(gender) as cnt 
       FROM my_table 
       WHERE created>'2016-07-06 00:00:00'
       GROUP BY dt,country,city, gender
     ) T 
 JOIN
     (
      SELECT city,SUM(cnt) as Tot
      FROM (
         SELECT DATE(created) as dt,country, city, gender, count(gender) as cnt 
         FROM my_table 
         WHERE created>'2016-07-06 00:00:00'
         GROUP BY dt,country,city, gender
           ) X
      GROUP BY X.city
) AS S ON S.City =T.City AND T.gender  = 'female'

<强> SQL FIDDLE

相关问题