MySQL:两个不同分组的计数和总计
我正在与以下SQL进行斗争: 我有一个表,其中包含站点id和站点的引用域。我试着简单地按推荐人和站点计算出现次数,然后计算一个站点所有推荐人的总数 在我下面的结果中,计数和站点总数是不正确的。计数应为一半,例如,对于站点id 1,谷歌和亚马逊的计数应为10,而站点id 2的总数应为18。 知道我做错了什么吗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
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的性能应该很慢。为什么不尝试使用两个不同的查询而不是单个查询?谢谢,我会尝试一下!谢谢,我会试试的!谢谢,我会试试的!谢谢,我会试试的!