1

私は2つのテーブルを持っています。1つはアイテムで、もう1つはそれらのアイテムへの投票です。

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

私がやりたいのは、post_dateに基づいてすべてのアイテムを表示し、投票テーブルにtotal_yesが最も高い回答を表示することです。したがって、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

どんな助けでも大歓迎です!

4

2 に答える 2

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

注: アイテムに対して同じ total_yes = max で 2 つの回答がある場合、そのアイテムには 2 つの行があります。

于 2009-09-15T08:43:16.340 に答える
0

クエリの最後に追加LIMIT 1します:)

これには1つのレコードしか必要ありませんが、現時点では最初の日付で注文しているため、最後に投票された日付の最高票を獲得します。それはあなたが望むものですか?

最高の総投票数が必要な場合は、最初にそれまでに注文する必要があります。

于 2009-09-15T08:34:30.040 に答える