【问题标题】:mysql - select from 2 tables, count and group by columnmysql - 从 2 个表中选择,按列计数和分组
【发布时间】:2015-07-17 19:20:57
【问题描述】:

所以我有两张桌子:

页面:

id    page    visit_id
1      6         65
2      7         65
3      2         66
4      10        67

访问:

id    flipbook    
65      april         
66      april         
67      may   

我想返回每本翻书浏览了多少页:

april: 3 
may: 1

我的查询如下所示:

"SELECT a.flipbook, (SELECT count(b.page) from pages b WHERE a.id = b.visit_id) AS total FROM visits a GROUP BY a.flipbook"

但它会返回:

april: 1 
may: 1

因为它只获取 4 月以来的最后一次访问,我们访问了一个页面。

有什么想法吗?

【问题讨论】:

    标签: mysql select count where


    【解决方案1】:
    select a.flipbook, count(*)
      from visits a 
        inner join pages p
          on a.id = p.visit_id
      group by a.flipbook
    

    不需要子查询 - 这只是一个基本的连接和聚合。

    【讨论】:

    • @Speedwheel 没问题,欢迎采纳 :)
    • 9 分钟前?但我只是看到它:-(
    【解决方案2】:

    尝试使用这样的查询

    SELECT a.flipbook,COUNT(*) AS total
    FROM visits a 
    LEFT JOIN pages b ON a.id = b.visit_id
    GROUP BY a.flipbook
    

    【讨论】:

      【解决方案3】:

      嗯,有点跑题了……

      SELECT v.flipbook
           , COUNT(*) pages_viewed 
        FROM visits v 
        JOIN pages p 
          ON visit_id = v.id 
       GROUP 
          BY v.flipbook;
      

      如果您也想要“0”结果,请使用 OUTER JOIN 并计算其他内容。

      【讨论】:

        【解决方案4】:

        您可以尝试使用这样的查询:

        SELECT v.flipbook, COUNT(*) AS total
        FROM pages p 
        LEFT JOIN visits v ON p.visit_id=v.id 
        GROUP BY v.flipbook
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-31
          • 2012-11-03
          • 1970-01-01
          • 1970-01-01
          • 2013-03-21
          • 2013-09-04
          • 2013-01-12
          相关资源
          最近更新 更多