MySQL Query解析两张表,两个字段

标签 mysql sql

数据库名=大学

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/

相关文章:

mysql - 优化缓慢的 mysql 查询

mysql - WordPress 数据库错误 Lock wait timeout exceeded;尝试重新启动查询 UPDATE wp_wppa_session 的事务

php - 关于传递给查询的变量的问题

sql - 将列添加到架构中的多个表

SQL Server 2008、临时表、游标

php - 反序列化查询(数组)数据不起作用

mysql - mysql索引优化问题

mysql - SQL中如何使用查询关系

php - SQL PHP 连接 4 个表

java - Hibernate 4.3.0 XML 映射转义字符异常