1

私がSQLに精通しておらず、この問題が少し困惑していることを最初に認めさせてください。

テーブルから上位5つのレコードを返すアルゴリズムを作成する必要があります。上位5つのレコードは、3つの列を合計して計算し、スコアが最も高い上位5つを返す必要があります。

誰かが私にこの種の声明をどのように行うかについてのいくつかの指針を教えてもらえますか?

私はしばらくの間いくつかのコードをいじり回していて、どこにも速く到達していません。

よろしくマーク

4

4 に答える 4

3

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
于 2013-03-27T09:28:08.370 に答える
3

これにより、目的の効果が得られる場合があります。

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;
于 2013-03-27T09:30:37.367 に答える
2

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
于 2013-03-27T09:31:16.517 に答える
-1

'orderby'と'limit'の組み合わせを試してください。

select *, (col1 + col2 + col3) as total
  from MyTable
  order by total desc
  limit 5;

これはmysqlの構文であり、sql-serverではないことに注意してください

于 2013-03-27T09:30:55.620 に答える