Mysql SQL join和count将其集合在一起

Mysql SQL join和count将其集合在一起,mysql,sql,join,Mysql,Sql,Join,我是SQL的初学者,在同时加入和计数时遇到了一些麻烦。 首先让我解释一下我的两张桌子。 我有以下资料: Table: AnalysePageview id title session more ----------------------------------------------------- 1 a 10 0 2

我是SQL的初学者,在同时加入和计数时遇到了一些麻烦。 首先让我解释一下我的两张桌子。 我有以下资料:

   Table: AnalysePageview
          id       title     session      more
        -----------------------------------------------------
           1         a           10        0
           2         b           20        1
           3         c           30        1            
           4         d           40        1
           5         e           50        1
           6         f           60        0

    Table: AnalyseEvent
          id       name     session      more
        -----------------------------------------------------
           1         a           10        0
           2         b           10        1
           3         c           10        1            
           4         d           20        1
我想把这两个加在一起,加一行如下:

    New Table:
          id       name       session   counts (out off AnalyseEvent)
        -----------------------------------------------------
           1         a           10        3
           2         b           20        1
           3         c           30        0            
           4         d           40        0
           5         e           50        0
           6         f           60        0
我刚试过这个:

SELECT *, 
       COUNT( AnalyseEvent.session ) AS totalViews 
FROM AnalysePageview  
LEFT JOIN AnalyseEvent ON AnalysePageview.session = AnalyseEvent.session

提前谢谢你的帮助。(我的答案是一个小的初学者解释)

你需要一个
小组成员

SELECT apv.id, apv.name, apv.session, COUNT( ae.session ) AS totalViews
FROM AnalysePageview  apv LEFT JOIN
     AnalyseEvent ae
     ON apv.session = ae.session
GROUP BY apv.id, apv.name, apv.session;

我还添加了表别名,以使查询更易于编写和读取。

您需要一个
分组依据:

SELECT apv.id, apv.name, apv.session, COUNT( ae.session ) AS totalViews
FROM AnalysePageview  apv LEFT JOIN
     AnalyseEvent ae
     ON apv.session = ae.session
GROUP BY apv.id, apv.name, apv.session;

我还添加了表别名,以使查询更易于编写和读取。

您需要使用group by。比如:

select apw.id, apw.title, apw.session, count(1)
from AnalysePageview apw
left join AnalyseEvent ae
    on apw.session = ae.session
group by apw.id, apw.title, apw.session

您需要使用分组方式。比如:

select apw.id, apw.title, apw.session, count(1)
from AnalysePageview apw
left join AnalyseEvent ae
    on apw.session = ae.session
group by apw.id, apw.title, apw.session

在你的问题中,你还应该说明你的尝试有什么问题。只是让人们更容易发现问题并提供帮助。在你的问题中,你还应该说明你的尝试有什么问题。只是让人们更容易发现问题并提供帮助。为什么要对所有的问题进行分组(apv.id、apv.name、apv.session)难道apv.session不足够吗?@汉堡包:因为不清楚如何处理
n
apv.name
中的所有不同值(例如)对于相同的
apv.session
,如果仅按此列分组,则应将聚合函数应用于
SELECT
子句中包含但不包含在
groupby
子句中的字段,或者将其放在
groupby
子句中,这当然取决于所需的结果,因为在一般情况下,上述两种方法会有所不同。为什么要对所有(apv.id、apv.name、apv.session)进行分组不是apv.session不够吗?@汉堡包:因为不清楚如何处理
n
apv.name
中的所有不同值(例如)对于相同的
apv.session
,如果仅按此列分组,则应将聚合函数应用于
SELECT
子句中包含但不包含在
groupby
子句中的字段,或者将其放在
groupby
子句中,这当然取决于所需的结果,因为在一般情况下,上述两种方法是不同的。这有点复杂。SQL92要求使用完整的GROUPBY,SQL99放松了这一点,并要求select中的所有列在功能上依赖于GROUPBY子句。如果AIK all DBMS使用更严格的SQL92定义,mysql将完全忽略它并生成随机结果,除非覆盖默认设置。如果是tat,mysql也使用更严格的定义。如果您知道其他列是apw.session的f.d.,您可以在其他列上应用聚合函数,如max。这有点复杂。SQL92要求使用完整的GROUPBY,SQL99放松了这一点,并要求select中的所有列在功能上依赖于GROUPBY子句。如果AIK all DBMS使用更严格的SQL92定义,mysql将完全忽略它并生成随机结果,除非覆盖默认设置。如果是tat,mysql也使用更严格的定义。如果您知道其他列是apw.session的f.d.,则可以在其他列上应用聚合函数,如max。