私がSQLに精通しておらず、この問題が少し困惑していることを最初に認めさせてください。
テーブルから上位5つのレコードを返すアルゴリズムを作成する必要があります。上位5つのレコードは、3つの列を合計して計算し、スコアが最も高い上位5つを返す必要があります。
誰かが私にこの種の声明をどのように行うかについてのいくつかの指針を教えてもらえますか?
私はしばらくの間いくつかのコードをいじり回していて、どこにも速く到達していません。
よろしくマーク
私がSQLに精通しておらず、この問題が少し困惑していることを最初に認めさせてください。
テーブルから上位5つのレコードを返すアルゴリズムを作成する必要があります。上位5つのレコードは、3つの列を合計して計算し、スコアが最も高い上位5つを返す必要があります。
誰かが私にこの種の声明をどのように行うかについてのいくつかの指針を教えてもらえますか?
私はしばらくの間いくつかのコードをいじり回していて、どこにも速く到達していません。
よろしくマーク
SQL Server Management Studioで次のことを試しましたが、必要な処理が行われているようです。
SELECT TOP 5 * FROM
(
SELECT Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable
) tmp
ORDER BY Rank DESC
編集
あなたが実際に外側の選択を必要とせず、書くことができることに気づきました:
SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable
ORDER BY Rank DESC
これはSQLServer2008でテストされました。
MyTable
内部選択で呼び出されたテーブルから、列の値と他の3つの列の合計を選択します。外側の選択は、選択された合計でこれらを順序付け、上位5を取ります。
例:ソーステーブルには次のデータが含まれています
Value1 Col1 Col2 Col3
V0 0 0 0
V1 1 0 0
V2 2 0 0
V3 3 9 0
V4 4 9 0
V5 5 9 0
V6 6 9 10
V7 7 9 10
内側の選択は作成します
Value1 Rank
V0 0
V1 1
V2 2
V3 12
V4 13
V5 14
V6 25
V7 26
そして、外側の選択は戻ります
Value1 Rank
V7 26
V6 25
V5 14
V4 13
V3 12
これにより、目的の効果が得られる場合があります。
MySQL
SELECT Value1, (Col1 + Col2 + Col3) AS Rank
FROM MyTable
ORDER BY Rank DESC
LIMIT 5;
SQL
SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank
FROM MyTable
ORDER BY Rank DESC;
SQL Serverは、ステートメントTOP
で返されるレコードの数を制限するために使用します。SELECT
SELECT TOP 5 Column1, (Column1 + Column2 + Column3) totalSum
FROM TableName
ORDER BY totalSum DESC
同点を処理する場合WITH TIES
は、TOP
句を追加します。
SELECT TOP 5 WITH TIES Column1,
(Column1 + Column2 + Column3) totalSum
FROM TableName
ORDER BY totalSum DESC
'orderby'と'limit'の組み合わせを試してください。
select *, (col1 + col2 + col3) as total
from MyTable
order by total desc
limit 5;
これはmysqlの構文であり、sql-serverではないことに注意してください