我在 MySQL 查询方面需要一些帮助。
我有两个表,一个表是带有 is_homepage
(bool) 标志的 backlinks
列表。第二个表是所有 backlinks
的 domains
列表,一个是 link_found
(bool) 标志,和一个 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
我希望从上述数据中获得的结果是:count = 2,total = 5。
我正在尝试从域表中获取行数 (count),然后从域表中获取 url_count
的总和(总计),其中 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
表中的每个条目返回一行。我想我可能还需要一个子查询来将返回的结果相加,但我不确定这是否正确。有没有人看到我做错了什么?谢谢!
编辑:
我遇到的问题是,如果反向链接表中有多个主页,那么它会被计算多次。我只需要计算每个域一次。
最佳答案
好吧,您不必进行分组依据,因为您没有选择聚合字段以外的任何内容。我不是 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
关于带有两个连接表的 MySQL 查询、COUNT 和 SUM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16281892/