[SQL] SQL习题中的几个问题

老师,这里问几个SQL习题的问题:

  1. Q2: select country, count(posts) * 1.0 / count(user_id) as avg_posts, 看from的subquery里面应该是先计算出每个user每个date的总post数,那这边应该是sum(posts)还是count(posts)?
  2. Q19: subquery是
    from(
    select post_id as id, content_type, count(*) as num_comments
    from ()t1 left join ()t2 on …
    group by post_id) t3
    这里面group by 后面除了post_id, 需不需要加上content_type? 不加postgresql会报错吗?
  3. Q30: select… coalesce(sum(t1.price) * 1.0 / sum(t2.spend), 0) as ROI, 这里是不是应该 t2.price, t1.spend?

我觉得应该用sum(posts).

补充问题:
4. subquery里面的group by u.user_id, date 这其中date没有指明是哪个表里的,是不是会报错?
5. 另外答案如果简化为如下会有问题么?

select u.country,
sum(case when.ua.event = ‘post’ then 1 else 0 end)/count(u.user_id) as avg_posts
from user u
left join user_actions ua
on u.user_id = ua.user_id and u.date = ua.date
where u.dau_flag = 1 and u.date = current_date
group by u.country

  1. 是sum

  2. 其实是depends的,我这里认为post_id是unique的,是一个primary key所以不出报错

  3. 对的,当时用的right join,t1和t2就反了。

  4. 对的,应该是u.date

  5. 可以简化成类似的,这道题我其实是简化了一下,之前是需要group by date的。但是你这里需要count(distinct u.user_id)