首页 文章

来自相关表的mysql平均计数

提问于
浏览
3

我有两张 table :

用户表

用户列表

故事

故事列表 - 每个用户多个故事

我想知道用户的平均故事数 . (不是特定用户,适用于所有用户)

预期结果:每个用户平均故事数为2.3

尝试:

选择avg(w)from(select count(distinct user_id)as w from story group by user_id)a;上面跑,但似乎不正确

也:

SELECT user_id,(SELECT COUNT(*)FROM stories w WHERE w.user_id = u.user_id)作为TotalStories FROM user u;

返回每个用户的平均故事,而非整体平均值

2 回答

  • 1

    首先,您需要知道每个用户的故事数量:

    select count(s.id) as n
    from users u left outer join stories s on u.id = s.user_id
    group by u.id
    

    然后只需应用 avg

    select avg(n)
    from (
        select count(s.id) as n
        from users u left outer join stories s on u.id = s.user_id
        group by u.id
    ) as dt
    
  • 3
    SELECT COUNT(userid) AS totalusers, SUM(storycount) AS totalstories, SUM(storycount) / COUNT(userid) AS average_stories
    FROM (
        SELECT users.id AS userid, COUNT(stories.id) AS storycount
        FROM users
        LEFT JOIN stories ON (users.id = stories.user_id)
        GROUP BY users.id
    ) AS child
    

    内部查询执行每用户故事计数 . 外部查询计算总用户数,总故事数和每个用户平均数的故事数 .

相关问题