我有一個表叫畫廊。對於圖庫中的每一行,表中有幾行圖片。一張圖片屬於一個畫廊。然後是表投。那裏的每一行都是對某個畫廊的贊成或低估。 這裏是(簡化)結構:聚合與兩個聯接(MySQL)
gallery (gallery_id)
picture (picture_id, picture_gallery_ref)
vote (vote_id, vote_value, vote_gallery_ref)
現在我想一個查詢給我下面的信息:用自己的數據字段的所有畫廊和連接到畫廊和sumarized值的圖片數量的選票。
這是我的查詢,但由於多次加入聚合值是不正確的。 (至少當有任何圖片或票數多於一行。)
SELECT
*, SUM(vote_value) as score, COUNT(picture_id) AS pictures
FROM
gallery
LEFT JOIN
vote
ON gallery_id = vote_gallery_ref
LEFT JOIN
picture
ON gallery_id = picture_gallery_ref
GROUP BY gallery_id
因爲我已經注意到,COUNT(DISTINCT picture_id)
給了我正確的數字圖片的我試過這樣:
(SUM(vote_value)/GREATEST(COUNT(DISTINCT picture_id), 1)) AS score
它的工作原理在這個例子中,但是如果在一個查詢中有更多的連接呢?
只是想知道是否有更好或更「優雅」的方式可以解決這個問題。另外,我想知道我的解決方案是特定於MySQL還是標準SQL?
您的GROUP BY正在使用您未定義的列,我假設您的意思是gallery_id。 – sfossen 2009-02-18 20:46:32
是的,小錯誤 – okoman 2009-02-18 20:52:55