gpt4 book ai didi

mysql - 查找特定日期按类别计数的百分比

转载 作者:行者123 更新时间:2023-11-29 15:38:36 27 4
gpt4 key购买 nike

这是我根据以下 sql 问题创建的假设问题 http://sqlfiddle.com/#!9/ef1f32f/15我偶然发现的它本身就是 http://sqlfiddle.com/#!2/1b72f3/1 的修改版本

我正在尝试查找在特定日期内活跃的人数百分比,并按位置对他们进行分组。

我是个菜鸟,学习sql子查询。

这是我从 What percentage of users participated on each day (SQL Query) 修改的一些代码.

这里是示例数据:

|id     |activity_typeid|   competitionid|  userid| time| activity_weight| location

22 2151 52736be97b706 421 2013-11-04T08:30:38Z 2 SF

1951 2151 52736be97b706 231 2013-11-01T09:05:22Z 2 LA

1961 2151 52736be97b706 241 2013-11-01T09:07:30Z 2 LA

请检查 sqlfiddle 链接中的其余部分。

SELECT date(time) as typical_day, location,
count(distinct userid) as counting,
count(distinct userid) / sum(cnt) * 100 percentage
FROM activity_entries ae join
(select count(distinct userid) as cnt
from activity_entries) cd
where date(time) = '2013-11-01'
GROUP BY location;

我得到的洛杉矶、俄克拉何马州和旧金山的百分比分别为 33.3、20 和 50。然而,预期百分比应该是 37.5、37.5 和 25。

我不确定我的代码中缺少什么。

我花了几个小时试图弄清楚,但无济于事。请帮我解决这个问题,不要关闭问题。

最佳答案

我不知道你如何获得你期望的值。但如果您想要所有用户的比例,那么sum(cnt)会让您失望。查询应该看起来更像这样:

SELECT date(time) as typical_day, activityname, cnt,
count(distinct userid) as counting,
count(distinct userid) / cnt * 100 percentage
FROM activity_entries ae CROSS JOIN
(select count(distinct userid) as cnt
from activity_entries) cd
WHERE date(time) = '2013-11-01'
GROUP BY date(time), activityname, cnt;

如果您想要给定日期的用户比例,那么:

SELECT date(ae.time) as typical_day, ae.activityname, cd.cnt,
count(distinct ae.userid) as counting,
count(distinct ae.userid) / cd.cnt * 100 percentage
FROM activity_entries ae JOIN
(SELECT date(time) as date,
COUNT(distinct userid) as cnt
FROM activity_entries
GROUP BY date(time)
) cd
ON date(ae.time) = cd.date
WHERE date(ae.time) = '2013-11-01'
GROUP BY date(ae.time), ae.activityname, cd.cnt;

关于mysql - 查找特定日期按类别计数的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57934828/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com