MySQL:两个不同分组的计数和总计

MySQL:两个不同分组的计数和总计,mysql,sql,Mysql,Sql,我正在与以下SQL进行斗争: 我有一个表,其中包含站点id和站点的引用域。我试着简单地按推荐人和站点计算出现次数,然后计算一个站点所有推荐人的总数 在我下面的结果中,计数和站点总数是不正确的。计数应为一半,例如,对于站点id 1,谷歌和亚马逊的计数应为10,而站点id 2的总数应为18。 知道我做错了什么吗 SELECT site_id, I.referrer_domain AS referrer_domain, COUNT(*) AS items, t.site_total FROM qV

我正在与以下SQL进行斗争: 我有一个表,其中包含站点id和站点的引用域。我试着简单地按推荐人和站点计算出现次数,然后计算一个站点所有推荐人的总数

在我下面的结果中,计数和站点总数是不正确的。计数应为一半,例如,对于站点id 1,谷歌和亚马逊的计数应为10,而站点id 2的总数应为18。 知道我做错了什么吗

SELECT site_id, I.referrer_domain AS referrer_domain, COUNT(*) AS items, t.site_total
  FROM qVisitor_Tracking_1 as I, 
      (SELECT COUNT(1) AS site_total
         FROM `qVisitor_Tracking_1` 
        WHERE `referrer_domain` != '' group by site_id) AS T
 WHERE `referrer_domain` != '' 
 GROUP BY `site_id`, referrer_domain


site_id   referrer  count   site total
1         amazon    20      24
1         google    20      24
2         amazon    12      24
2         google    18      24

如果我理解您的需求,那么看起来您缺少将子查询连接到主表的ON子句

SELECT I.site_id, 
        I.referrer_domain AS referrer_domain, 
        COUNT(*) AS items, 
        T.site_total 
FROM qVisitor_Tracking_1 as I
INNER JOIN 
(
    SELECT site_id, 
            COUNT(1) AS site_total 
    FROM qVisitor_Tracking_1 
    WHERE referrer_domain != '' 
    GROUP BY site_id
) AS T 
ON I.site_id = T.site_id
WHERE referrer_domain != '' 
GROUP BY I.site_id, referrer_domain, T.site_total

如果我理解您的需求,那么看起来您缺少将子查询连接到主表的ON子句

SELECT I.site_id, 
        I.referrer_domain AS referrer_domain, 
        COUNT(*) AS items, 
        T.site_total 
FROM qVisitor_Tracking_1 as I
INNER JOIN 
(
    SELECT site_id, 
            COUNT(1) AS site_total 
    FROM qVisitor_Tracking_1 
    WHERE referrer_domain != '' 
    GROUP BY site_id
) AS T 
ON I.site_id = T.site_id
WHERE referrer_domain != '' 
GROUP BY I.site_id, referrer_domain, T.site_total

如果我理解您的需求,那么看起来您缺少将子查询连接到主表的ON子句

SELECT I.site_id, 
        I.referrer_domain AS referrer_domain, 
        COUNT(*) AS items, 
        T.site_total 
FROM qVisitor_Tracking_1 as I
INNER JOIN 
(
    SELECT site_id, 
            COUNT(1) AS site_total 
    FROM qVisitor_Tracking_1 
    WHERE referrer_domain != '' 
    GROUP BY site_id
) AS T 
ON I.site_id = T.site_id
WHERE referrer_domain != '' 
GROUP BY I.site_id, referrer_domain, T.site_total

如果我理解您的需求,那么看起来您缺少将子查询连接到主表的ON子句

SELECT I.site_id, 
        I.referrer_domain AS referrer_domain, 
        COUNT(*) AS items, 
        T.site_total 
FROM qVisitor_Tracking_1 as I
INNER JOIN 
(
    SELECT site_id, 
            COUNT(1) AS site_total 
    FROM qVisitor_Tracking_1 
    WHERE referrer_domain != '' 
    GROUP BY site_id
) AS T 
ON I.site_id = T.site_id
WHERE referrer_domain != '' 
GROUP BY I.site_id, referrer_domain, T.site_total

I和t之间没有连接,既没有直接连接,也没有间接连接(在where部分)。你刚才有乘法吗

FROM qVisitor_Tracking_1 as I, 
      (SELECT COUNT(1) AS site_total
         FROM `qVisitor_Tracking_1` 
        WHERE `referrer_domain` != '' group by site_id) AS T
 WHERE `referrer_domain` != '' 

I和t之间没有连接,既没有直接连接,也没有间接连接(在where部分)。你刚才有乘法吗

FROM qVisitor_Tracking_1 as I, 
      (SELECT COUNT(1) AS site_total
         FROM `qVisitor_Tracking_1` 
        WHERE `referrer_domain` != '' group by site_id) AS T
 WHERE `referrer_domain` != '' 

I和t之间没有连接,既没有直接连接,也没有间接连接(在where部分)。你刚才有乘法吗

FROM qVisitor_Tracking_1 as I, 
      (SELECT COUNT(1) AS site_total
         FROM `qVisitor_Tracking_1` 
        WHERE `referrer_domain` != '' group by site_id) AS T
 WHERE `referrer_domain` != '' 

I和t之间没有连接,既没有直接连接,也没有间接连接(在where部分)。你刚才有乘法吗

FROM qVisitor_Tracking_1 as I, 
      (SELECT COUNT(1) AS site_total
         FROM `qVisitor_Tracking_1` 
        WHERE `referrer_domain` != '' group by site_id) AS T
 WHERE `referrer_domain` != '' 

在mysql中,您可以将“分组依据”修饰符
与“汇总”一起使用:

SELECT site_id, referrer_domain COUNT(*) AS items
  FROM qVisitor_Tracking_1
 WHERE referrer_domain != '' 
 GROUP BY site_id, referrer_domain WITH ROLLUP
它应该给出如下结果:

site_id   referrer  items
1         amazon    7   
1         google    13
1         NULL      20   
2         amazon    6   
2         google    9
2         NULL      15
NULL      NULL      35

请参阅:

在mysql中,您可以使用带有汇总的
GROUP BY
修饰符

SELECT site_id, referrer_domain COUNT(*) AS items
  FROM qVisitor_Tracking_1
 WHERE referrer_domain != '' 
 GROUP BY site_id, referrer_domain WITH ROLLUP
它应该给出如下结果:

site_id   referrer  items
1         amazon    7   
1         google    13
1         NULL      20   
2         amazon    6   
2         google    9
2         NULL      15
NULL      NULL      35

请参阅:

在mysql中,您可以使用带有汇总的
GROUP BY
修饰符

SELECT site_id, referrer_domain COUNT(*) AS items
  FROM qVisitor_Tracking_1
 WHERE referrer_domain != '' 
 GROUP BY site_id, referrer_domain WITH ROLLUP
它应该给出如下结果:

site_id   referrer  items
1         amazon    7   
1         google    13
1         NULL      20   
2         amazon    6   
2         google    9
2         NULL      15
NULL      NULL      35

请参阅:

在mysql中,您可以使用带有汇总的
GROUP BY
修饰符

SELECT site_id, referrer_domain COUNT(*) AS items
  FROM qVisitor_Tracking_1
 WHERE referrer_domain != '' 
 GROUP BY site_id, referrer_domain WITH ROLLUP
它应该给出如下结果:

site_id   referrer  items
1         amazon    7   
1         google    13
1         NULL      20   
2         amazon    6   
2         google    9
2         NULL      15
NULL      NULL      35

请参阅:

这可以通过使用子查询来实现,但sql的性能应该很慢。为什么不尝试使用两个不同的查询而不是单个查询?这可以通过使用子查询实现,但sql的性能应该很慢。为什么不尝试使用两个不同的查询而不是单个查询?这可以通过使用子查询实现,但sql的性能应该很慢。为什么不尝试使用两个不同的查询而不是单个查询?这可以通过使用子查询实现,但sql的性能应该很慢。为什么不尝试使用两个不同的查询而不是单个查询?谢谢,我会尝试一下!谢谢,我会试试的!谢谢,我会试试的!谢谢,我会试试的!