Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Count wynikow w grupach
lexis72
post 5.02.2015, 22:08:42
Post #1





Grupa: Zarejestrowani
Postów: 124
Pomógł: 0
Dołączył: 25.02.2013

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


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.
Go to the top of the page
+Quote Post
sazian
post 5.02.2015, 22:41:55
Post #2





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


  1. SELECT user,grupa,klasa,min(wynik) FROM tabela GROUP BY grupa,klasa
Go to the top of the page
+Quote Post
pmir13
post 6.02.2015, 16:21:33
Post #3





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 31.07.2025 - 08:56