SQL dotaz pro multigroup stavů dle její hodnoty
- Terka04
- Člen | 44
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. 2022 22:15)
- Terka04
- Člen | 44
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. ♥