mysql:如何INNER JOIN一个表但限制连接到具有最高投票或计数的1个结果?

时间:2009-09-15 08:33:13

标签: mysql inner-join

我有2张桌子。一个是项目,另一个是对这些项目的投票。

Items table has: |item_id|name|post_date
Votes table has: |votes_id|item_id|answer|total_yes|total_no

我想要做的是显示基于post_date的所有项目,并在投票表中以最高的total_yes显示答案。所以我想在投票表中只显示一个单一的答案,其中总票数最高。

我在尝试:

SELECT a.*, b.* FROM Items a
INNER JOIN Votes b ON a.item_id = b.item_id
GROUP by a.item_id
ORDER by a.post_date DESC, b.total_yes DESC

但那不起作用。

我希望看到的结果是:

<item><answer><yes votes>
Buick | Fastest | 2 yes votes
Mercedes | Shiny | 32 yes votes
Honda | Quick | 39 yes votes

感谢任何帮助!

2 个答案:

答案 0 :(得分:8)

SELECT a.*, b.*
  FROM Items a
       LEFT JOIN Votes b on a.item_id = b.item_id
                         and b.total_yes = (select max(total_yes) 
                                              from Votes v 
                         where v.item_id = a.item_id)
ORDER BY a.post_date DESC, b.total_yes DESC

N.B。:如果您有一个具有相同total_yes = max的项目2答案,那么该项目将有2行。

答案 1 :(得分:0)

LIMIT 1添加到查询的末尾:)

只会记录一条记录,但是在您按照日期排序的那一刻,所以您将获得投票最后一次投票的最高票数。这就是你想要的吗?

如果您想获得最高票数,无论您是否需要首先订购。