Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL SELECT i ORDER BY

Rozważ następujący zestaw danych...

DROP TABLE IF EXISTS results;

CREATE TABLE results
(id_competitor   INT NOT NULL
,score    INT NOT NULL
,id_route INT NOT NULL
,PRIMARY KEY(id_competitor,id_route)
);

INSERT INTO results VALUES
(1,100,2),
(2,100,2),
(3,60,2),
(4 ,60,2),
(1,70,1),
(2,80,1),
(3,70,1),
(4,100,1);

SELECT * FROM results;
+---------------+-------+----------+
| id_competitor | score | id_route |
+---------------+-------+----------+
|             1 |    70 |        1 |
|             1 |   100 |        2 |
|             2 |    80 |        1 |
|             2 |   100 |        2 |
|             3 |    70 |        1 |
|             3 |    60 |        2 |
|             4 |   100 |        1 |
|             4 |    60 |        2 |
+---------------+-------+----------+

Chcemy rozmieścić zawodników według najwyższego wyniku na id_route=2. W przypadku równej liczby punktów należy wziąć pod uwagę wyniki z id_route 1. Prawidłowa kolejność powinna wynosić 2,1,4,3.

Rozwiązanie pośrednie...

SELECT * 
  FROM results x 
  JOIN results y 
    ON y.id_competitor = x.id_competitor 
   AND y.id_route = 1 
 WHERE x.id_route = 2;
+---------------+-------+----------+---------------+-------+----------+
| id_competitor | score | id_route | id_competitor | score | id_route |
+---------------+-------+----------+---------------+-------+----------+
|             1 |   100 |        2 |             1 |    70 |        1 |
|             2 |   100 |        2 |             2 |    80 |        1 |
|             3 |    60 |        2 |             3 |    70 |        1 |
|             4 |    60 |        2 |             4 |   100 |        1 |
+---------------+-------+----------+---------------+-------+----------+

Kompletne rozwiązanie...

SELECT x.id_competitor
     , x.score final_score
     , y.score semi_final_score 
  FROM results x 
  JOIN results y 
    ON y.id_competitor = x.id_competitor 
   AND y.id_route = 1 
 WHERE x.id_route = 2 
 ORDER 
    BY final_score DESC
     , semi_final_score DESC;
+---------------+-------------+------------------+
| id_competitor | final_score | semi_final_score |
+---------------+-------------+------------------+
|             2 |         100 |               80 |
|             1 |         100 |               70 |
|             4 |          60 |              100 |
|             3 |          60 |               70 |
+---------------+-------------+------------------+



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cytat pojedynczy, cytat podwójny i znaki wsteczne w zapytaniach MySQL

  2. Rozwijana lista rozwijana html, wybrana wartość nie jest wstawiana do MYSQL

  3. Podzapytanie MYSQL SELECT w klauzuli JOIN

  4. Przeczytaj e-mail imap php

  5. pole tekstowe typu wejściowego dające naprawiony błąd 2147483647