Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sortowanie uczniów wg. ocen
Userr
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

Ostrzeżenie: (0%)
-----


Mam taką tabelę z polami: id INT, id_ucznia INT, imie_ucznia VARCHAR, oceny INT

Jej zawartość:
1, 1, Janek, 4
2, 3, Kasia, 5
3, 3, Kasia, 4
4, 2, Paweł, 3
5, 1, Janek, 4
6, 2, Paweł, 5
7, 2, Kasia, 5
8, 1, Janek, 2
9, 4, Robert, 3
10, 3, Kasia 4
11, 4, Robert, 4
12, 4, Robert, 4

Chciałbym, żeby wyświetlić uczniów w kolejności od najlepszych, do najsłabszych ocen. Z tym, że jeżeli jacyś uczniowie mają piątki, to liczy się liczba piątek (uczeń z większą liczbą piątek będzie przed uczniem z mniejszą liczbą piątek). Jeżeli okaże się, że jacyś uczniowie mają taką samą liczbą piątek, to liczy się liczba czwórek, itd. Chciałbym więc taką kolejność:

1. Kasia – 5, 5, 4, 4
2. Paweł – 5, 3
3. Robert – 4, 4, 3
4. Janek – 4, 4, 2

Jakim zapytaniem MySQL można by to było osiągnąć? Pewnie trzeba będzie wykorzystać GROUP BY i ORDER BY?

Ten post edytował Userr 27.11.2016, 13:14:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Userr
post
Post #2





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

Ostrzeżenie: (0%)
-----


Przetestowałem zapytanie grupując po id_ucznia (nie jestem pewny czy prawidłowo to zrobiłem):

  1. SELECT o1.imie, GROUP_CONCAT(o1.ocena ORDER BY o1.ocena DESC)
  2. FROM ocena AS o1
  3. JOIN (SELECT imie, id_ucznia, MAX(ocena) AS maks FROM ocena GROUP BY id_ucznia) AS o2 ON o2.imie=o1.imie
  4. GROUP BY o1.id_ucznia
  5. ORDER BY maks*SUM(o1.ocena=o2.maks) DESC


na tabelce z takimi wierszami jak podałem wyżej w poście:

  1. CREATE TABLE IF NOT EXISTS `ocena` (
  2. `id` int(50) UNSIGNED NOT NULL,
  3. `id_ucznia` int(20) DEFAULT NULL,
  4. `imie` varchar(30) DEFAULT NULL,
  5. `ocena` int(20) DEFAULT NULL
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
  7.  
  8. INSERT INTO `ocena` (`id`, `id_ucznia`, `imie`, `ocena`) VALUES
  9. (1, 1, 'Janek', 4),
  10. (2, 3, 'Kasia', 5),
  11. (3, 3, 'Kasia', 4),
  12. (4, 2, 'Pawel', 3),
  13. (5, 1, 'Janek', 4),
  14. (6, 2, 'Pawel', 5),
  15. (7, 2, 'Kasia', 5),
  16. (8, 1, 'Janek', 2),
  17. (9, 4, 'Robert', 3),
  18. (10, 3, 'Kasia', 4),
  19. (11, 4, 'Robert', 4),
  20. (12, 4, 'Robert', 4);


i otrzymałem nie takie rezultaty jak trzeba:

Kasia 5,5,3
Janek 4,4,2
Robert 4,4,3
Kasia 5,4,4

Czy wynika to z tego, że źle użyłem grupowania po id_ucznia?

Ten post edytował Userr 27.11.2016, 17:17:42
Go to the top of the page
+Quote Post

Posty w temacie
- Userr   Sortowanie uczniów wg. ocen   27.11.2016, 13:03:31
- - trueblue   Zakładam, że jednak nie liczy się liczba wyższych ...   27.11.2016, 13:16:25
|- - Userr   Cytat(trueblue @ 27.11.2016, 13:16:25...   27.11.2016, 13:33:12
- - trueblue   Pierwsze takie: [SQL] pobierz, plaintext SELECT im...   27.11.2016, 13:52:15
- - Userr   Przetestowałem zapytanie grupując po id_ucznia (ni...   27.11.2016, 17:06:20
- - trueblue   JOIN też na id_ucznia.   27.11.2016, 18:01:06
- - Userr   Wstawiłem id_ucznia do GROUP BY w JOIN() oraz do ...   27.11.2016, 18:42:30
- - trueblue   Masz pomieszanych uczniów. Paweł i Kasia mają id=2...   27.11.2016, 18:49:48
- - Userr   Poprawiłem i póki co działa świetnie Dziękuję za ...   27.11.2016, 20:50:28
- - trueblue   Podejrzewam, że najwygodniej w CSS (lista numerowa...   27.11.2016, 21:06:36
- - mihmih   CytatAle ma wadę, bo jeśli Uczeń1 ma tylko ocenę 2...   27.11.2016, 22:18:04
- - trueblue   Masz na myśli uszeregowanie właśnie według wyniku ...   27.11.2016, 22:22:24
- - mihmih   no zgadza się, nie znałem tego założenia że sama p...   27.11.2016, 22:26:17
- - trueblue   Ja też nie Ale zakładam, że analogicznie do ...   27.11.2016, 22:29:11
- - mihmih   można też taki ciąg uzupełnić osemkami do 100 pozy...   27.11.2016, 22:38:12
- - trueblue   Cytat(mihmih @ 27.11.2016, 22:38:12 )...   27.11.2016, 22:49:49
- - Userr   Cytat(trueblue @ 27.11.2016, 21:06:36...   28.11.2016, 12:18:09
- - trueblue   Cytat(Userr @ 28.11.2016, 12:18:09 ) ...   28.11.2016, 12:24:49
- - Userr   Dostawiłem kod związany ze zmienną @numer: [SQL] ...   29.11.2016, 12:20:50
- - trueblue   Musisz owinąć wszystkie tabele w klauzuli FROM w (...   29.11.2016, 12:59:17
|- - Userr   Cytat(trueblue @ 29.11.2016, 12:59:17...   29.11.2016, 15:21:27
- - Userr   Czy byłby sens zapisać wyniki tego selecta w czymś...   29.11.2016, 14:29:18
- - viking   Mógłby pomóc na normalnym SBD ale mysql nie posiad...   29.11.2016, 14:43:50
- - trueblue   Jedna zmienna i jeden IF wystarczy gdybyś chciał m...   29.11.2016, 15:46:21


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 03:15