問題2
次のテーフ゛ル「tb」で、カラム「uria」が50以上のデータだけを対象にして、「bang」ごとの「uria」の平均で120以上のものだけを、「uria」の平均の多いものから表示してください。 |
|
▶テーフ゛ル[tb] |
|
@ [uria]が50以上のデータ |
|
※A [bang]ごとの[uria]の平均で120以上 |
B グループ化後の[uria]が平均120以上の降順 |
|
|
|
|
|
|
WHERE uria>=50 |
|
HAVING AVG(uria)>=120; |
|
GROUP BY bang; ORDER BY
AVG(uria) DESC; |
|
|
bang |
uria |
tuki |
|
bang |
uria |
tuki |
|
bang |
uria |
tuki |
|
bang |
uria(avg) |
|
select bang,AVG(uria) B |
A103 |
101 |
4 |
|
A103 |
101 |
4 |
|
A101 |
184 |
4 |
|
A101 |
242 |
|
FROM tb |
A102 |
54 |
5 |
|
A102 |
54 |
5 |
|
A101 |
300 |
5 |
|
A104 |
137 |
|
WHERE uria>=50
@ |
A104 |
181 |
4 |
|
A104 |
181 |
4 |
|
A102 |
54 |
5 |
|
A102 |
129 |
|
GROUP BY
bang B |
A101 |
184 |
4 |
|
A101 |
184 |
4 |
|
A102 |
205 |
6 |
|
HAVING AVG(uria)>=120; A |
A103 |
17 |
5 |
|
A101 |
300 |
5 |
|
A104 |
181 |
4 |
|
ORDER BY AVG(uria) DESC; B |
A101 |
300 |
5 |
|
A102 |
205 |
6 |
|
A104 |
93 |
5 |
|
|
A102 |
205 |
6 |
|
A104 |
93 |
5 |
|
※A HAVING
AVG(uria)>=120の[HAVING]はGROUP BY bangBでグループ化した値に対するものです。 |
BAの順になるわけはリンク先にて^^ |
A104 |
93 |
5 |
|
A107 |
87 |
6 |
|
|
A103 |
12 |
6 |
|
|
A107 |
87 |
6 |
|
実行結果 |
|
|
|
|
mysql>
select bang,AVG(uria) FROM tb WHERE uria>=50 GROUP BY bang
HAVING AVG(uria)>=120 ORDER BY AVG(uria) DESC; |
|
+------+-----------+ |
|
|
|
|
| bang | AVG(uria) | |
|
|
|
|
+------+-----------+ |
|
|
|
|
| A101 | 242.0000 | |
|
|
|
|
| A104 | 137.0000 | |
|
|
|
|
| A102 | 129.5000 | |
|
|
|
|
+------+-----------+ |
|
|
|
|
3 rows in set (0.01 sec) |
|
|
|
|
下記はBにtukiを追加することで全部のカラムデータがでるようになりました。 |
|
mysql> select bang,AVG(uria),tuki FROM tb WHERE uria>=50 GROUP BY bang
HAVING AVG(uria)>=120 ORDER BY AVG(uria) DESC; |
|
+------+-----------+------+ |
|
|
|
|
| bang | AVG(uria) | tuki | |
|
|
|
|
+------+-----------+------+ |
|
|
|
|
| A101 | 242.0000 | 4 | |
|
|
|
|
| A104 | 137.0000 | 4 | |
|
|
|
|
| A102 | 129.5000 | 5 | |
|
|
|
|
+------+-----------+------+ |
|
|
|
|
3 rows in set (0.00 sec) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|