我有一个从查询中返回的模式
+------------+-------------+------------+---------+------+
| 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列计算百分比时,它失败了。
有人可以帮忙吗?
答案 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 强>