galleryというテーブルが1つあります。ギャラリーの各行について、テーブル画像にはいくつかの行があります。1枚の写真は1つのギャラリーに属しています。次に、テーブル投票があります。各行には、特定のギャラリーの賛成票または反対票があります。(簡略化された)構造は次のとおりです。
gallery ( gallery_id )
picture ( picture_id, picture_gallery_ref )
vote ( vote_id, vote_value, vote_gallery_ref )
ここで、1つのクエリで次の情報を取得したいと思います。独自のデータフィールドを持つすべてのギャラリー、ギャラリーに接続されている写真の数、および投票の合計値。
これが私のクエリですが、複数の結合があるため、集計された値は正しいものではありません。(少なくとも、写真または投票のいずれかの行が複数ある場合。)
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
この例では機能しますが、1つのクエリにさらに多くの結合がある場合はどうなりますか?
この問題を解決できる「よりエレガントな」方法があるかどうかを知りたいだけです。また、私のソリューションがMySQL固有であるか標準SQLであるかを知りたいですか?