数据库名=大学
table1: university_info
field = university_name, student_number
e.g. values:
university_name student_number
USC 12345
USC 54321
UW 23456
UW 65432
table2: student_info
field = student_number, student_test_scores
e.g. values:
student_number student_test_scores
12345 50
12345 60
54321 70
54321 80
23456 90
23456 92
65432 90
65432 100
我上面有两个表。让我们称之为数据库大学。我想在第一个查询中解析并输出大学名称、学号和学生考试成绩。
Example of first query:
e.g result
USC 12345 50
USC 12345 60
USC 54321 70
USC 54321 80
UW 23456 90
UW 23456 92
UW 65432 90
UW 65432 100
在第二个查询中,我想要相同的输出,但这次的学生考试成绩更高。
Example of second query:
USC 12345 60
USC 54321 80
UW 23456 92
UW 65432 100
一旦我们获得了最高学生考试成绩,我们需要对第三个查询中的考试成绩进行平均,并输出最高学生考试成绩的平均值。
Example of third query:
Average test scores = 83
这是我目前为止对第二个查询的了解。我不知道如何添加名称:
mysql> select student_info.student_number, student_info.student_test_scores
-> from student_info
-> where (student_number='12345' and student_test_scores > 50)
-> or (student_number='54321' and student_test_scores > 70)
-> or (student_number='23456' and student_test_scores > 90)
-> or (student_number='65432' and student_test_scores > 90)
-> ;
+----------------+---------------------+
| student_number | student_test_scores |
+----------------+---------------------+
| 12345 | 60 |
| 54321 | 80 |
| 23456 | 92 |
| 65432 | 100 |
+----------------+---------------------+
4 rows in set (0.00 sec)
我知道有一种更好的方法可以执行上述 3 个查询。我只是不知道该怎么做。谁能帮我?提前致谢。
最佳答案
SQL 非常擅长做这件事。
您需要使用 GROUP BY 语法,以及聚合函数 MAX 和 AVG。
SELECT u.university_name, s.student_number, s.student_test_scores
FROM student_info AS s
INNER JOIN university_info AS u ON s.student_number = u.student_number
ORDER BY u.university_name, s.student_number, s.student_test_scores
SELECT u.university_name, s.student_number, MAX(s.student_test_scores)
FROM student_info AS s
INNER JOIN university_info AS u ON s.student_number = u.student_number
GROUP BY u.university_name, s.student_number
ORDER BY u.university_name, s.student_number
SELECT AVG(a.student_test_scores)
FROM (
SELECT u.university_name, s.student_number, MAX(s.student_test_scores) AS student_test_scores
FROM student_info AS s
INNER JOIN university_info AS u ON s.student_number = u.student_number
GROUP BY u.university_name, s.student_number
) AS a
关于MySQL Query解析两张表,两个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13309220/