これを説明するのは少し難しいかもしれませんが、SQL サーバー データベースには単純化した 2 つの列があります...
アイテム
ID
itemName
voteCount
スコア
投票
itemID
スコア
したがって、基本的には、1 つのテーブルに配置されたすべての投票を格納していますが、アイテム テーブル内の各アイテムの投票数のカウントと、その平均スコア (10 点満点中) も格納しています (データが重複していることはわかっていますが、物事をより簡単にします)。
とにかく、スコアが最も低い2つのアイテムを見つけるSQLクエリを作成したいと思います。これを行うだけなので、これは簡単だと思います...
SELECT TOP 2 itemName FROM Items ORDER BY score ASC;
ただし、クライアントは次の複雑さを追加しました。
2 つ以上の項目が同じスコアの場合、10/10 票の最高数の項目が上に配置されます。2 つ以上の項目が同じスコアで、同じ数の 10/10 票を持っている場合、他の項目よりも 9/10 票が多い項目がランク付けされます。それ以外は等しいです。
したがって、課題は、これらの基準によってすべてのアイテムをランク付けし、下位 2 を選択することです。これを解決するために、グループ化、集計、および「サブクエリ」のあらゆる組み合わせを試しましたが、もっと賢い人の助けが必要だと思います私より。
どんな助けでも本当に感謝します。
明確化
アイテムの平均スコアはアイテム テーブルに保存され、各投票に対するスコアは投票テーブルに保持されます。最初に、平均スコア (I.score) でランク付けする必要があり、2 つのアイテムが同じスコアを持つ場合、そのアイテムにリンクされた投票 (v.score) の 10/10 の数を数え始める必要があります。
したがって、平均スコアが 5/10 の「T シャツ」というアイテムがあるとします。これは、次のスコア 5、5、5、5、5、5 の 6 票から得られます。
次のアイテムは「フェラーリ」と呼ばれ、同じく平均スコアが 5/10 ですが、このアイテムは 4 票しかなく、次のスコアは 6,5,5,4 です。
SQL は 10 も 9 も 8 も 7 も持っていないことを確認するため、明らかにフェラーリが勝つはずですが、T シャツに勝る 6 票があります。