2012-11-09 68 views
1

數據庫名稱=大學MySQL查詢解析兩張桌子,兩個字段

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個查詢的方式。我只是不知道該怎麼做。誰能幫我?提前致謝。

+0

我無法理解的第三個問題 –

+0

時間來了解'JOIN's和子 –

+0

爲什麼當它看起來像你在mysql中工作這個標記爲甲骨文? – DazzaL

回答

1

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 
+0

的MySQL> SELECT AVG(a.student_test_scores) - > FROM( - >選擇u.university_name,s.student_number,MAX(s.student_test_scores) - > FROM student_info爲S - > INNER JOIN university_info爲u S上.student_number = u.student_number - > GROUP BY u.university_name,s.student_number - >)AS a; 錯誤1054(42S22):'字段列表'中的未知列'a.student_test_scores' mysql> –

+0

其他兩個查詢都很完美,非常感謝你 –

+0

最後一次編輯做到了......哇,我有很多東西要學大聲笑......謝謝你的方向,但。學習時間到。 –