我有一张叫做画廊的桌子。对于画廊中的每一行,表格图片中有几行。一张图片属于一个画廊。然后是桌票。每一行都是对某个画廊的赞成或反对。这是(简化的)结构:
gallery ( gallery_id )
picture ( picture_id, picture_gallery_ref )
vote ( vote_id, vote_value, vote_gallery_ref )
现在我想要一个查询给我以下信息:所有画廊都有自己的数据字段和连接到画廊的图片数量和投票的汇总值。
这是我的查询,但由于多次加入,聚合值不是正确的。(至少当图片或选票超过一排时。)
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?