最近筆試題目,總是碰到一些SQL語句的基本操作,現簡單總結下。
題目:表名爲t,name字段代表姓名,score字段代表分數,請根據要求寫出SQL語句。
建表:
我使用的是navicat for MySQL 11.1.11.
代碼:
5個問題代碼寫在一起了。第一行是先看看所有信息。
圖片展示:
鏈式寫法:
SELECT * FROM t;
SELECT name,SUM(score) FROM t GROUP BY name ORDER BY SUM(score) DESC LIMIT 1,4;
SELECT name,SUM(score) FROM t GROUP BY name HAVING SUM(score) < 150;
SELECT name,AVG(score) FROM t GROUP BY name HAVING AVG(score)>60 AND AVG(score)<90;
SELECT name,SUM(score),AVG(score) FROM t GROUP BY name HAVING AVG(score)<90 AND SUM(score)>150;
SELECT COUNT(*) n FROM (SELECT name,SUM(score),AVG(score) FROM t GROUP BY name HAVING AVG(score)<90 AND SUM(score)>150) n;
優化寫法:
代碼1:
SELECT
*
FROM
t;
代碼2:
SELECT
NAME,
SUM(score)
FROM
t
GROUP BY
NAME
ORDER BY
SUM(score) DESC
LIMIT 1,
4;
代碼3:
SELECT
NAME,
SUM(score)
FROM
t
GROUP BY
NAME
HAVING
SUM(score) < 150;
代碼4:
SELECT
NAME,
AVG(score)
FROM
t
GROUP BY
NAME
HAVING
AVG(score) > 60
AND AVG(score) < 90;
代碼5:
SELECT
NAME,
SUM(score),
AVG(score)
FROM
t
GROUP BY
NAME
HAVING
AVG(score) < 90
AND SUM(score) > 150;
代碼6:
SELECT
COUNT(*) n
FROM
(
SELECT
NAME,
SUM(score),
AVG(score)
FROM
t
GROUP BY
NAME
HAVING
AVG(score) < 90
AND SUM(score) > 150
) n;
結果:
結果1:
結果2:
結果3:
結果4:
結果5:
結果6:
!!!注意:
1.having不能和order by 一起用。
2.
SELECT
COUNT(*) n
FROM
(
SELECT
NAME,
SUM(score),
AVG(score)
FROM
t
GROUP BY
NAME
HAVING
AVG(score) < 90
AND SUM(score) > 150
) n;
在上面的這個查詢裏,()部分外必須定義表別名m ,不然就報錯,[Err] 1248 - Every derived table must have its own alias。
總結:
直接上書本上的公式,有權威性。
完畢。