2013-04-29 71 views
1

我需要一個MySQL查詢的幫助。MySQL查詢,有兩個連接表的COUNT和SUM

我有兩個表格,一個表格是backlinks列表,is_homepage(布爾)標誌。第二張表是所有backlinks,link_found(布爾)標誌和url_count列的domains列表,它是與每個域關聯的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表中的每個條目。我想我可能需要一個更多的子查詢來合併返回的結果,但我不確定這是否正確。有沒有人看到我在做什麼錯了?謝謝!


編輯:

我遇到的問題是,如果在返回鏈接表,則其計算多次不止一個主頁。我只需要計算一次域名。

+0

你應該張貼您的查詢解決的問題作爲回答,然後接受它。 – Taryn 2013-04-29 15:26:24

+1

好的。它說我必須等待2天才能接受我自己的答案,所以我會在本週晚些時候完成。 – RachelC 2013-04-29 15:59:43

回答

0

感謝您的幫助。很抱歉它是如此難以解釋,我需要一個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 
0

那麼,你不應該做一個組,因爲你沒有選擇除聚合字段以外的任何東西。我沒有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 
0

你要在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 here