Autor | Zpráva | ||
---|---|---|---|
Fury Profil * |
#1 · Zasláno: 30. 10. 2017, 15:14:00
Zdravím,
mám následující dva dotazy: select AVG(a.answer) average from answers a left join users u on u.id = a.user_id where u.role in (1,2) select AVG(a.answer) average from answers a left join users u on u.id = a.user_id where u.role in (3,4) A hledám cestu, zda se dají tyto dva dotazy sjednotit do jednoho a dělat rozdíl mezi AVG u uživatele s role (1,2) a u uživatele s role (3,4). Zkoušel jsem upravit select, kde jsem dal: AVG(IF(u.role = 3 or u.role = 4, a.answer, '')) Ale to bohužel vracelo jiný průměr. Dá se to řešit pouze jedním dotazem? Díky moc! |
||
TomášK. Profil * |
#2 · Zasláno: 30. 10. 2017, 15:54:33
To je jen o vhodném přeskládání čísel, ne? Něco jako
SUM(IF(u.role IN (1,2), a.answer, 0)) / SUM(u.role IN(1,2)) - SUM(IF(u.role IN (3,4), a.answer, 0)) / SUM(u.role IN(3,4)) . Dva dotazy jsou o něco přehlednější, stačí INNER JOIN .
|
||
Kajman Profil |
#3 · Zasláno: 30. 10. 2017, 16:01:00
SELECT (SELECT Avg(a.answer) average FROM answers a JOIN users u ON u.id = a.user_id WHERE u.role IN ( 1, 2 )) - (SELECT Avg(a.answer) average FROM answers a JOIN users u ON u.id = a.user_id WHERE u.role IN ( 3, 4 )) rozdil |
||
Fury Profil * |
#4 · Zasláno: 30. 10. 2017, 16:08:23
Super, díky za radu, akorát narazil jsem tam ještě na jednu věc, pokud bych dotaz upravil, že bych výsledky groupoval dle type_id, tzn. že dotaz by vypadal:
SELECT Avg(a.answer) average FROM answers a JOIN users u ON u.id = a.user_id WHERE u.role IN ( 1, 2 )) GROUP BY a.type_id Výsledky by tedy byly např: type_id average 1 2,3847 2 2,9583 3 2,4758 A já bych chtěl mít rozdíly mezi všemi type_id u u.role IN ( 1, 2 ) vs u.role IN ( 3, 4 ). Dá se i toto udělat dotazem do DB, nebo to už spíše řešit na úrovni PHP? Díky |
||
tttt Profil * |
#5 · Zasláno: 30. 10. 2017, 21:01:32
SELECT types.id, t1.average - t2.average AS diff FROM types JOIN ( SELECT AVG(a.answer) average FROM answers a JOIN users u ON u.id = a.user_id WHERE u.role IN ( 1, 2 ) GROUP BY ) t1 ON types.id = t1.type_id JOIN ( SELECT AVG(a.answer) average FROM answers a JOIN users u ON u.id = a.user_id WHERE u.role IN ( 3, 4 ) GROUP BY ) t2 ON types.id = t2.type_id Vymysli si, jaké chceš JOINy a případně ošetři null v average.
|
||
Časová prodleva: 7 let
|
0