gpt4 book ai didi

Mysql 引用嵌套查询的派生表

转载 作者:行者123 更新时间:2023-11-29 14:53:02 25 4
gpt4 key购买 nike

我昨天发布了与此类似的内容,但现在我想要与我的查询稍有不同的内容 -

我正在尝试查询数据库以检索一段时间内访问过某个网站的一次性用户的数量。数据看起来像这样:

Day | UserID  
1 | A
1 | B
2 | B
3 | A
4 | B
4 | C
5 | D

我希望查询结果是这样的

Time Span      | COUNT(DISTINCT UserID)  
Day 1 to Day 1 | 2
Day 1 to Day 2 | 1
Day 1 to Day 3 | 0
Day 1 to Day 4 | 1
Day 1 to Day 5 | 2

结果是 2,1,0,1,2,因为在这些天结束时,有 X 个用户访问过一次。例如对于第 5 天,在第 5 天结束时,用户 c 和 d 各只访问过一次。

我想我正在寻找与此类似的查询:

select d.day, (select count(distinct userid) from visits where day<=d.day)
from (select distinct day from visits) d

上面的查询与我正在寻找的查询之间的区别在于,我希望这个新查询只考虑每个时间跨度的一次性用户,而不是重复用户。

谢谢

最佳答案

这个子查询应该可以满足明确的要求。

select d.day, count(distinct case when b.userid is null then a.userid end)
from (select day from visits group by day) d
inner join
(
select a.day, a.userid, count(*) c
from visits a
join visits b on a.userid=b.userid and b.day <= a.day
group by a.day, a.userid
having count(*) = 1
) a on a.day <= d.day
left join
(
select a.day, a.userid, count(*) c
from visits a
join visits b on a.userid=b.userid and b.day <= a.day
group by a.day, a.userid
having count(*) > 1
) b on a.userid = b.userid and b.day <= d.day
group by d.day

原版

您一定是从 SQL Server 中汲取了这个想法 - 它是唯一允许您引用两次删除(嵌套)查询的 RDBMS (IIRC)。请指明您想要什么,我们可以重写查询。

对于显示的确切查询,您不需要 2 级子查询

SELECT  
C.col_c1 AS Data,
(
SELECT count(col_b1)
FROM tbl
WHERE col_b2 <= C.col_c1
) A
FROM (
SELECT col_c1 # subquery to get distinct c1
FROM tbl
GROUP BY col_c1) C;

关于Mysql 引用嵌套查询的派生表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330166/

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