Sot kam hasur në detyrën e mëposhtme ndërsa po punoja për një projekt të klientit: Merrni një tryezë SQL "përdorues" me kolonat "id" dhe "pikë" dhe përcaktoni një renditje të të gjithë përdoruesve bazuar në "rezultatin" në të cilin përdoruesit me merrni të njëjtën renditje me të njëjtën rezultat. Kjo detyrë mund të zgjidhet në mënyrë intuitive dhe të lehtë duke përdorur variablat e përcaktuar nga përdoruesi .
CREATE TABLE user(id INT, score INT); INSERT INTO user(id, score) VALUES (1, 10), (2, 40), (3, 55), (4, 10), (5, 5), (6, 20), (7, 30), (8, 70), (9, 30)
Përdorimi i dy ndryshoreve e zgjidh këtë thjesht
SET @score_prev = NULL; SET @cur_rank = 0; SELECT id, score, CASE WHEN @score_prev = score THEN @cur_rank WHEN @score_prev := score THEN @cur_rank := @cur_rank + 1 END AS rank FROM user ORDER BY score DESC
dhe ju merrni prodhimin që dëshironi
+--------+-----------+----------+ | *id* | *score* | *rank* | | 8 | 70 | 1 | | 3 | 55 | 2 | | 2 | 40 | 3 | | 7 | 30 | 4 | | 9 | 30 | 4 | | 6 | 20 | 5 | | 1 | 10 | 6 | | 4 | 10 | 6 | | 5 | 5 | 7 | +--------+-----------+----------+