MySQL查询,COUNT和SUM有两个连接表(MySQL query, COUNT and SUM

2019-10-18 01:49发布

我需要一个MySQL查询有点帮助。

我有两个表一个表的列表, backlinksis_homepage (布尔)标记。 第二个表是列表domains对所有的backlinks ,一个被link_found (布尔)标志,以及一个url_count列这是在的行数backlinks与每个域相关联的表。

需要注意的是, domain_id列是外键域表id列。 下面有一些示例数据。

反向链接

id    domain_id    is_homepage    page_href
1     1            1              http://ablog.wordpress.com/
2     1            0              http://ablog.wordpress.com/contact/
3     1            0              http://ablog.wordpress.com/archives/
4     2            1              http://www.somewhere.org/
5     2            0              http://www.somewhere.org/page=3
6     3            1              http://www.great-fun-site.com/
7     3            0              http://www.great-fun-site.com/index.html
8     4            0              http://red.blgspot.com/page=7
9     4            0              http://blue.blgspot.com/page=9

id    url_count    link_found    domain_name
1     3            1             wordpress.com
2     2            0             somewhere.org
3     2            1             great-fun-site.com
4     2            1             blgspot.com

进出口寻找从以上数据得到的结果将是: 计数= 2,总= 5。

林试图从域表(计数),然后总和行数url_count从域表(总)WHERE link_found为1,凡在反向链接表中的链接之一is_homepage为1。

下面是我想与之合作的查询。

SELECT SUM(1) AS count, SUM(`url_count`) total
FROM `domains` AS domain 
LEFT JOIN `backlinks` AS link ON link.domain_id = domain.id 
WHERE domain.id IN (
        SELECT DISTINCT(bl.domain_id)
        FROM `backlinks` AS bl
        WHERE bl.tablekey_id = 11
        AND bl.is_homepage = 1
)
AND domain.link_found = 1
AND link.is_homepage = 1
GROUP BY `domain`.`id`

该查询的问题是,它返回一个排在每个条目domains表。 我想我可能需要多一个子查询加起来返回的结果,但我不知道这是正确的。 有谁看到我做错了什么? 谢谢!


编辑:

我遇到的问题是,如果在返回链接表,则其计算多次不止一个主页。 我只需要一次计算各个领域。

Answer 1:

那么,你不应该有,你没有选择比聚合领域的其它任何东西做一组。 我没有mysql的专家,但这应该工作:

SELECT count(d.id) as count, sum(d.url_count) as total from domains as d
inner join backlinks as b 
on b.domain_id = d.id 
 Where d.Link_found = 1  and b. is_homepage = 1


Answer 2:

你要在每个条目行的原因domains表是你通过分组domain.id 。 如果你想总计只,只留下断GROUP BY件。

我觉得一个非常简单的查询就可以了:

SELECT COUNT(*), SUM(domains.URL_Count)
FROM domains
WHERE domains.link_found = 1 AND domains.id IN (
  SELECT domain_id FROM backlinks WHERE is_homepage = 1)

有一个工作SQLFiddle 这里 。



Answer 3:

谢谢您的帮助。 很抱歉它是如此难以解释,我需要一个MySQL小提琴:)

如果任何人有兴趣的继承人什么我ened了:

SELECT SUM(1) AS count, SUM(total) AS total
FROM
(
SELECT SUM(`url_count`) total
FROM `domains` AS domain 
LEFT JOIN `backlinks` AS link ON link.domain_id = domain.id 
WHERE domain.id IN (
        SELECT DISTINCT(bl.domain_id)
        FROM `backlinks` AS bl
        WHERE bl.tablekey_id = 11
        AND bl.is_homepage = 1
)
AND domain.link_found = 1
AND link.is_homepage = 1
GROUP BY `domain`.`id`
) AS result


文章来源: MySQL query, COUNT and SUM with two joined tables
标签: mysql count sum