现有三表
表1 用户阅读资讯表 表2 用户添加股票票 表3 用户注册账户表
问题 求阅读完资讯后添加股票的这一部分用户的注册率是多少?
求问 我这样写算的逻辑出来结果为什么为1 正确的写法应该是什么 谢谢
select count(distinct case when p.user_id is not null then p.user_id end)/count(distinct t.user_id)
from
(
select t2.user_id,t2.add_date
from
(select user_id,add_date
from 资讯表
) as t1
inner join
(
select user_id,add_date
from 选股表
) as t2
on t1.user_id=t2.user_id
where t1.add_date<=t2.add_date
) as t
left join(
select user_id, add_date
from 注册表
)as p
on p.user_id=t.user_id
where p.add_date >=t.add_date
SELECT count(DISTINCT CASE WHEN p.user_id IS NOT NULL and p.add_date >=t.add_date THEN p.user_id END)/count(DISTINCT t.user_id)
FROM (SELECT t2.user_id,
t2.add_date
FROM (SELECT user_id, add_date FROM 资讯表 ) AS t1
INNER JOIN (SELECT user_id, add_date FROM 选股表 ) AS t2 ON t1.user_id=t2.user_id
WHERE t1.add_date<=t2.add_date
) AS t
LEFT JOIN ( SELECT user_id, add_date FROM 注册表 )AS p ON p.user_id=t.user_id;
加点图片,看看报错
谢邀。因为你最后一个where限制相当于把空过滤掉了,
改成 where p.add_date >=t.add_date or p.user_id is null