Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:ИЗБЕРЕТЕ победител, връщайки неговия ранг

Мисля, че това ще ви даде желания резултат. Имайте предвид, че правилно се справям със случаите, при които целевият победител е равен на точки с друг победител. (И двамата получават една и съща позиция).

SELECT COUNT(*) + 1 AS Position
FROM myTable
WHERE Points > (SELECT Points FROM myTable WHERE Winner = 'Sally')

Редактиране :
Бих искал да „включа“ Игнасио Васкес-Абрамс ' отговор, който по няколко начина е по-добър от горния.
Например позволява изброяване на всички (или няколко) победители и тяхната текуща позиция.
Друго предимство е, че позволява изразяване на по-сложно условие за да посочи, че даден играч е пред друг (вижте по-долу). Четене на incrediman Коментарът на , че няма да има "връзки", ме подтикна да разгледам това; заявката може да бъде леко променена, както следва, за да се справи със ситуацията, когато играчите имат еднакъв брой точки (на такива играчи преди е била дадена същата стойност на позицията, сега стойността на позицията е допълнително обвързана с техните относителни начални стойности).

SELECT w1.name, (
  SELECT COUNT(*)
  FROM winners AS w2
  WHERE (w2.points > w1.points) 
     OR (W2.points = W1.points AND W2.Start < W1.Start)  -- Extra cond. to avoid ties.
)+1 AS rank
FROM winners AS w1
-- WHERE W1.name = 'Sally'   -- optional where clause


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли различен начин за изпълнение на тази програма без използване на вложен цикъл while?

  2. Сортиране на филми по 2 неща

  3. Каква е производителността на mysql МЕЖДУ ..?

  4. Как да актуализирам същата таблица при изтриване в MYSQL?

  5. Не може да се инсталира mysqlclient Python пакет на Windows