分组 GROUP BY 与 HAVING
57.17 分组 GROUP BY 与 HAVING
GROUP BY 列 按列分组,常配合 COUNT/AVG/SUM 做分组统计。
HAVING 过滤分组结果(类似 WHERE,但用于聚合之后)。
SELECT 中非聚合列一般应出现在 GROUP BY 中。
每班人数与平均分
import pymysql
conn = pymysql.connect(host='127.0.0.1', user='root', password='root', database='py_demo', charset='utf8mb4')
try:
with conn.cursor() as cur:
cur.execute('''
SELECT class_name,
COUNT(*) AS num,
AVG(score) AS avg_score,
MAX(score) AS top_score
FROM students
GROUP BY class_name
HAVING AVG(score) >= 70
ORDER BY avg_score DESC
''')
for row in cur.fetchall():
print(row)
finally:
conn.close()