Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Count wynikow w grupach
Forum PHP.pl > Forum > Bazy danych > MySQL
lexis72
Witam,
W jaki najlatwiejszy sposob można wyciągnąc informacje ile razy użytkownik ABC miał najmniejszy wynik w danej grupie zakładając że unikalność grupy określa druga kolumna klasa_id czyli połączenie kolumn grupa i klasa ustala czy dany wynik jest w tej samej grupie czy juz w innej.


Wycinek tabeli

ID|user|wynik|grupa|klasa

1 | ABC | 3 | 1 | 1 |
2 | ZXC | 5 | 1 | 1 |
3 | XCZ | 1 | 2 | 1 |
4 | ABC | 4 | 2 | 1 |
5 | XCZ | 4 | 1 | 2 |
6 | ABC | 7 | 1 | 2 |

Czyli mamy po 2 rekordy (dwa wyniki, dwoch uzytkownikow) w trzech grupach 1-1, 2-1 i 1-2. Na tym przykladzie ABC wystapil 3 razy ale najmniejszy wynik mial tylko w grupie 1-1.
sazian
  1. SELECT user,grupa,klasa,min(wynik) FROM tabela GROUP BY grupa,klasa
pmir13
Cytat(sazian @ 5.02.2015, 22:41:55 ) *
  1. SELECT user,grupa,klasa,min(wynik) FROM tabela GROUP BY grupa,klasa

Zdecydowanie odradzam tworzenie takiego rodzaju zapytań. Mysql zwróci tutaj pierwszego w grupie usera przy małej ilości danych, zupełnie dowolnego i nieoczekiwanego przy większej ilości.

Prawidłowo powinno być:
  1. SELECT COUNT(*) AS ile_razy_najmniejszy FROM
  2. ( SELECT grupa, klasa, min(wynik) AS minumum
  3. FROM wyniki
  4. GROUP BY grupa, klasa ) m
  5. JOIN wyniki w
  6. ON m.grupa = w.grupa AND m.klasa = w.klasa AND m.minumum = w.wynik
  7. WHERE w.user = "ABC"


W tym przypadku zakładamy że user może mieć tylko jeden wynik w danej grupie i klasie oraz jeśli w najmniejszych wynikach jest remis, a jeden z tych wyników należy do szukanego usera, to wciąż się liczy jako najmniejszy.
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.