Burning Thoughts Ответов: 3

Как ранжировать самую высокую сумму к самой низкой сумме


у меня есть этот стол

КОД НАИМЕНОВАНИЕ СУММА
1 AAA 50000
2 BBB 49999
3 CCC 15001
4 DDD 28000
5 KKK 15000
6 EEE 28005
7 SSS 50000

мне нужен такой рейтинг: 50000 1-й , 49999 2-й, 3-й 35000.. точно так же увеличенная сумма получит самый высокий ранг .

Что я уже пробовал:

я пробовал rank, dense_rank,ntile, Row count

RossMW

Что не так с инструкцией order или row_number см. https://msdn.microsoft.com/en-nz/library/ms186734.aspx

Burning Thoughts

значения, которые ближе, получают одинаковый ранг

RossMW

По определению это правильно, в противном случае вам понадобится вторичное поле уникального идентификатора, чтобы отделить одни и те же значения

3 Ответов

Рейтинг:
5

Vũ Văn Huy

SELECT *, DENSE_RANK () OVER (ORDER BY amount DESC)
из данных

1	AAA	50000	1
7	SSS	50000	1
2	BBB	49999	2
6	EEE	28005	3
4	DDD	28000	4
3	CCC	15001	5
5	KKK	15000	6


hoặc

SELECT *, RANK () OVER(ORDER BY amount DESC)
из данных
1	AAA	50000	1
7	SSS	50000	1
2	BBB	49999	3
6	EEE	28005	4
4	DDD	28000	5
3	CCC	15001	6
5	KKK	15000	7


Рейтинг:
25

OriginalGriff

Попробуй:

SELECT * FROM MyTable ORDER BY Amount DESC

Единственная причина, которая может не дать вам то, что вы хотите, - это если вы храните Amount в столбце VARCHAR или NVARCHAR-в этом случае сравнение будет строковым, а не числовым, и все сравнение будет основано на первом другом символе. Таким образом, ваш порядок сортировки станет
1
10
11
12
...
18
19
2
20
21
...
Если да, то измените свою базу данных, чтобы вместо нее использовать числовой столбец.


[редактировать]
Вы имеете в виду:
SELECT ID, Name, Amount,  RANK () OVER (ORDER BY Amount DESC)  as Rank
      FROM MyTable
ORDER BY Amount DESC

Что даст вам:
ID	Name	    Amount	Rank
1	AAA       	5000	1
4	SSS       	5000	1
2	BBB       	4999	3
3	CCC       	1500	4


Или:
SELECT ID, Name, a.Amount, b.Rank
FROM MyTable a
JOIN (SELECT Amount, RANK () OVER (ORDER BY Amount DESC)  as Rank
      FROM (SELECT DISTINCT Amount FROM MyTable)x) b ON a.Amount = b.Amount
ORDER BY a.Amount DESC

Что даст вам:
ID	Name	    Amount	Rank
1	AAA       	5000	1
4	SSS       	5000	1
2	BBB       	4999	2
3	CCC       	1500	3

[/редактировать]


Burning Thoughts

можете ли вы ранжировать эти суммы на основе самых высоких сумм, как показано ниже

50000 1-й,
49999 2-й,
35000 3-й

RossMW

Именно это и означает утверждение desc (нисходящее).

Burning Thoughts

это то, что я ищу
код наименование сумма ранг
1 AAA 50000 1
7 SSS 50000 1
2 BBB 49999 2
6 EEE 28005 3
4 DDD 28000 4
3 CCC 15001 5
5 ККК 15000 6

OriginalGriff

Ответ обновлен

Рейтинг:
0

barneyman

Если вы хотите добавить ранг, то сначала вам нужно выбрать DISTINCT записи из столбца сумма

То, что NESTED SELECT вам нужно получить ROW_NUMBER когда он заказан по сумме, по убыванию

Затем с помощью этого запроса вы можете сделать JOIN на вашем оригинале SELECT, используя сумму в качестве критерия

Желаю удачи