2011-09-13 79 views
1
SELECT DISTINCT ID FROM (SELECT * FROM tbl1 UNION 
SELECT * FROM tbl2 UNION 
SELECT * FROM tbl3 UNION 
SELECT * FROM tbl4 ORDER BY total_hits DESC) AS sumtbl LIMIT 50; 

此查詢工作正常,並選擇唯一的ID通過total_hits DESC有序,問題是我怎麼能回到total_hits柱也有標識的獨特之處?Mysql的鮮明而選擇另一列

+0

下次您在您的問題中包含代碼時,請選擇所有代碼並單擊工具欄上的按鈕將其格式化爲代碼。 – Shef

+0

你爲什麼使用DISTINCT?是否有具有相同ID的行?如果是的話,你想從哪個行中得到total_hits? – nobody

+0

感謝explainig SHEF, –

回答

2
SELECT ID, SUM(total_hits) 
FROM (
    SELECT * FROM tbl1 UNION 
    SELECT * FROM tbl2 UNION 
    SELECT * FROM tbl3 UNION 
    SELECT * FROM tbl4 
) AS sumtbl 
GROUP BY ID 
ORDER BY SUM(total_hits) DESC 
LIMIT 50; 
+0

謝謝,這個查詢的工作,但不正是我問過,但我想我可以用它太,你的查詢總結這一切,而不選擇「total_hits」的頂部值的唯一區別。我想你想出了我想要的:)選擇內容的流行度。 –

-1

UPDATE

在你的情況,你可以做

SELECT ID, MAX(total_hits) as max_hits 
FROM (
    SELECT * FROM tbl1 UNION 
    SELECT * FROM tbl2 UNION 
    SELECT * FROM tbl3 UNION 
    SELECT * FROM tbl4 
)sumtbl 
GROUP BY ID 
ORDER BY max_hits DESC 
LIMIT 50 

注意:您沒有在派生的查詢需要ORDER BY,它進入上部

而且,它會更好,如果你
SELECT id, total_hits
FROM tbl1 UNION ALL
SELECT id, total_hits FROM tbl2
等,而不是從派生查詢中的表中選擇所有字段。

+0

羅最大值(total_hits),即只返回一行 –

+0

-1,這將只是一個選擇具有不確定ID的單行,那有什麼用? – Johan

+0

糟糕。對不起,1秒進行修復。 – a1ex07

0

如果你想從所有表中的所有ID的total_hits,你需要通過做一個總和/組。不知道這是你在問什麼,因爲這個問題是含糊不清......

SELECT DISTINCT id, sum(total_hits) total_hits 
FROM (SELECT * FROM tbl1 UNION 
    SELECT * FROM tbl2 UNION 
    SELECT * FROM tbl3 UNION 
    SELECT * FROM tbl4) AS sumtbl 
GROUP BY id 
ORDER BY total_hits DESC 
LIMIT 50 

另外,不要使用select *,因爲它是不好的做法,ESP。如果您將某列添加到其中一個表中而不是其他表中,則整個查詢將會中斷。

+0

幾乎是正確的,RedFilter的版本是正確的。你的版本不會按照它應該的方式排序。關於*我知道,只是一個例子,所以我不寫的所有列名;)也在使用DISTINCT和GROUP BY同時並不好,我認爲? –

+0

好了,只是確保有關*。此外,對此類感到遺憾。編輯。至於截然不同,你是否試過看它是怎麼回事? – WattsInABox