Member 13392936 Ответов: 2

Добавление баллов к ранжированию в SQL server


Я хотел бы добавить определенные баллы к рейтингам конкурентов в базе данных например
Avg              Placing/rank     points
  95              1st             140
  90             2nd              130
  85             3rd              120
  83             4th              110
  76             5th              100
  75             6th               90
  75             6th               90
  73             8th               80
  72             9th               70
  71             10th              60



если есть ничья для любого из размещений, то соответствующие конкуренты получат те же очки для размещения и размещения пропусков к следующему, что и при размещении 8-го места в приведенном выше примере.

Пожалуйста помогите

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

ранг, ранги строк,функция ранжирования, как ранжировать в базе данных

Karthik_Mahalingam

каков ваш вклад и ожидаемый результат?

Member 13392936

мой вход-это среднее время, которое будет определять размещение и набранные очки в качестве выхода

Karthik_Mahalingam

Итак, вы хотите получить выходные данные в приведенном выше табличном формате?

Member 13392936

большое спасибо, постараюсь и предоставлю обратную связь. с благодарностью

2 Ответов

Рейтинг:
20

Maciej Los

Взгляните на это: Функции ранжирования (Transact-SQL) | Microsoft Docs[^]. Вам нужно использовать RANK функция, например:

SELECT Src.points, RANK() OVER(ORDER BY Src.Points DESC) AS Placing
FROM (
	SELECT 140 AS points UNION ALL
	SELECT 130 AS points UNION ALL
	SELECT 120 AS points UNION ALL
	SELECT 110 AS points UNION ALL
	SELECT 100 AS points UNION ALL
	SELECT 90 AS points UNION ALL
	SELECT 90 AS points UNION ALL
	SELECT 80 AS points UNION ALL
	SELECT 70 AS points UNION ALL
	SELECT 60 AS points
) AS Src


Результат:
points	Placing
140	1
130	2
120	3
110	4
100	5
90	6
90	6
80	8
70	9
60	10


Рейтинг:
10

Pradeep Arthanari

вы можете попробовать это:

Есть жестко закодированные точки в отдельной таблице для каждого ранга. И создал временную таблицу, чтобы сначала найти ранг. Затем внутреннее соединение временной таблицы с таблицей точек для отображения точки на основе ранга.

declare  @avgrank table(avg1 int ,rank1 int  )
 insert into  @avgrank( avg1) values (95)
 insert into  @avgrank( avg1) values (90)
 insert into  @avgrank( avg1) values (85)
 insert into  @avgrank( avg1) values (83)
 insert into  @avgrank( avg1) values (76)
 insert into  @avgrank( avg1) values (75)
 insert into  @avgrank( avg1) values (75)
 insert into  @avgrank( avg1) values (73)
 insert into  @avgrank( avg1) values (72)
 insert into  @avgrank( avg1) values (71)


 declare @points table(rank1 int ,point int )
 insert into  @points values (1,140)
 insert into  @points values (2,130)
 insert into  @points values (3,120)
 insert into  @points values (4,110)
 insert into  @points values (5,100)
 insert into  @points values (6,90)
 insert into  @points values (7,80)
 insert into  @points values (8,70)
 insert into  @points values (9,60)
 


 IF OBJECT_ID('tempdb..#tempavg') IS NOT NULL
    DROP TABLE #tempavg

 SELECT avg1, RANK() OVER (ORDER BY avg1 DESC) AS Placing  
  INTO #tempavg FROM @avgrank a 

SELECT avg1,Placing, p.point FROM #tempavg ta INNER JOIN @points p ON ta.Placing = p.rank1