Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Tworzenie rankingu
Forum PHP.pl > Forum > Bazy danych > MySQL
Athlan
Witam.

Posiadam taką tabelę w bazie danych:

  1. CREATE TABLE `test` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `points` int(1) NOT NULL,
  4. `team` varchar(255) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
  7.  
  8. INSERT INTO `test` (`id`, `points`, `team`) VALUES
  9. (1, 5, 'a'),
  10. (2, 5, 'b'),
  11. (3, 5, 'a'),
  12. (4, 3, 'c'),
  13. (5, 2, 'a'),
  14. (6, 5, 'd'),
  15. (7, 5, 'b');


Jest to spis zadań wykonywanych przez drużyny, które dostają za wykonanie punkty

Kiedy wykonuję zapytanie:
  1. SELECT SUM(points) AS rank_points, COUNT(id) AS rank_jobs, team FROM test WHERE points > 0 GROUP BY team

Zwraca mi w wyniku ilość zdobytych punktów, ilość wykonanych zadań oraz ID drużyny która wykonała zadanie. Mój problem polega na tym, że muszę posortować te wyniki wg średniej punktów każdej drużyny malejąco.

Czyli: rank_points/rank_job = rank_rating. Chciałbym posortować to wg. rank_rating DESC. Oczywiście mogę sobie uzyć funkcji usort" title="Zobacz w manualu PHP" target="_manual, ale co da się na bazie to powinniśmy to robić.
Z góry dziękuję za odpowiedzi, Athlan smile.gif
AcidBurnt
  1. SELECT
  2. SUM(points) AS rank_points, COUNT(id) AS rank_jobs, team, sum(pints)/count(id) AS rating
  3. FROM test WHERE points > 0 GROUP BY team ORDER BY rating
Athlan
Poprawne zapytanie:
  1. SELECT
  2. SUM(points) AS rank_points, COUNT(id) AS rank_jobs, team, SUM(points)/COUNT(id) AS rank_rating
  3. FROM test WHERE points > 0 GROUP BY team ORDER BY rank_rating DESC


najpierw grupujemy, potem sortujemy smile.gif Zupełnie zapomniałem o tym, że można wykonywać jakiekolwiek obliczenia w SELECT.

Dzięki za szybką odpowiedź AcidBrunt smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.