SQL dotaz pro multigroup stavů dle její hodnoty

Terka04
Člen | 24
+
0
-

Zdravím všechny,
prosila bych o radu. Potřebovala bych z tabulky vytáhnout počet daných stavů pro jednotlivé e-maily (v tomto příkladě uživatele). Pro představu.

Mám tabulku:

  • id | user | stav
  • 1 | user1 | 0
  • 2 | user1 | 0
  • 3 | user1 | 1
  • 4 | user1 | 2
  • 5 | user2 | 1
  • 6 | user2 | 1
  • 7 | user2 | 1
  • 8 | user2 | 3

A výsledek by měl vypadat

  • user | stav0 | stav1 | stav2 | stav3
  • user1 | 2 | 1 | 1 | 0
  • user2 | 0 | 3 | 0 | 1

Zkoušela jsem si pohrávat s funkcí count(id) as GROUP BY např:

SELECT user, count(id) as 'stav1' FROM table GROUP BY stav;

, ale to jsem dostávala nežádoucí výsledek. Uživatele mi to vrátilo tolikrát, kolik různých stavů měl.

Nevěděl by někdo, prosím? :) Snažím se přepsat PHP funkci, která to počítala, do dotazu databáze (optimalizace). Popřípadě navrhněte, prosím, lepší řešení.

Cílem je získat v SQL výsledku pouze jedne řádek s user1 a druhý řádek s user2 a k tomu příslušné počty.

Děkuji za váš čas s pomocí. :)

Editoval Terka04 (7. 1. 22:15)

phpfm
Člen | 9
+
+2
-
select
user,
count(case when stav = 0 then 1 end) AS stav0,
count(case when stav = 1 then 1 end) AS stav1,
count(case when stav = 2 then 1 end) AS stav2,
count(case when stav = 3 then 1 end) AS stav3
from table
group by user
Terka04
Člen | 24
+
0
-

phpfm napsal(a):

select
user,
count(case when stav = 0 then 1 end) AS stav0,
count(case when stav = 1 then 1 end) AS stav1,
count(case when stav = 2 then 1 end) AS stav2,
count(case when stav = 3 then 1 end) AS stav3
from table
group by user

Děkuji moc za pomoc! :O O case when, then a end jsem ani neměla ponětí, že v SQL existuje. Mám se co učit. Děkuju. ♥