2013-03-27 7 views
1

Позвольте мне быть первым, кто признает, что я не самый большой с SQL, и эта проблема немного тупика.SQL top 5 алгоритмов записей

Мне нужно создать алгоритм, который вернет 5 лучших записей из таблицы. Лучшие 5 записей должны быть разработаны путем суммирования трех столбцов, а верхние 5 с наибольшим счетом должны быть возвращены.

Может ли кто-нибудь дать мне несколько указателей на то, как я буду делать подобные заявления, пожалуйста.

Я некоторое время возился с некоторым кодом, и я никуда не гожусь.

С уважением Марк

+0

Приветствия для каждого из них помочь, я забыл упомянуть тот факт, что я получаю значения из трех других таблиц, но предоставленная вами информация действительно помогла мне, и все это работает так, как мне нужно. Cheers again – markblue777

ответ

3

Я просто попытался следующие в SQL Server Management Studio и это, кажется, что вы хотите:

SELECT TOP 5 * FROM 
(
    SELECT Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable 
) tmp 
ORDER BY Rank DESC 

EDIT
Просто заметил, что вы на самом деле не требуется внешний выбор и может написать:

SELECT TOP 5 Value1, (Col1 + Col2 + Col3) AS Rank FROM MyTable 
ORDER BY Rank DESC 

Это было проверено в SQL Server 2008.


Он выбирает значение столбца и суммы три других столбцов из таблицы под названием MyTable во внутреннем выборе. Внешние заказы выберите эти по выбранной сумме и занимает верхнюю 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 

и наружной select to return

Value1 Rank 
    V7  26 
    V6  25 
    V5  14 
    V4  13 
    V3  12 
+0

У вас должен быть порядок по рангу внутри внутреннего выбора. В настоящее время это даст первые 5 результатов в любом порядке, который возвращает база данных, а затем закажет эти 5 DESC. – CathalMF

+0

Не имеет значения, так как внутренний выбор возвращает все записи. Внешний выбор затем сортирует их и выбирает верхнюю часть 5. –

+0

Псевдоним столбца ORDER BY отлично подходит для всех версий SQL Server. –

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; 
+0

это синтаксис mysql – DrCopyPaste

-1

Попробуйте сочетание 'приказа' и 'предел'.

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

Заметим, что это синтаксис для MySQL, а не SQL-сервер

+0

Почему вниз? – SteveP

+0

хотя концепция правильная, но синтаксис используется для 'MySQL'. - Не мой нисходящий. –

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 
Смежные вопросы