2013-07-29 70 views
0

我在我的dbpre_exer5這些表內聲明; // MySQL的wampserver2.2多選擇存儲過程的mysql

+-----------------------+ 
| Tables_in_dbpre_exer5 | 
+-----------------------+ 
| tblcourse    | 
| tblcutoff    | 
| tblgrades    | 
| tblstud    | 
| tblsub    | 
+-----------------------+ 

現在,我只想問我將如何能夠得到這些輸出考慮存儲過程的使用。 輸出爲:

+---------+----------------+---------------+-------+ 
| Gender | With Failure | W/out Failure | Total | 
+---------+----------------+---------------+-------+ 
| Male |  1  |  1  | 2 | 
| Female |  2  |  1  | 3 | 
+---------+----------------+---------------+-------+ 

這裏的方式是enter code here; **

mysql> select * from tblcourse; 
+-----------+------------------------+ 
| course_id | course_name   | 
+-----------+------------------------+ 
|   1 | Information Technology | 
|   2 | Computer Science  | 
+-----------+------------------------+ 
2 rows in set (0.00 sec) 

mysql> select * from tblgrades; 
+---------+--------+-------+ 
| stud_id | sub_id | grade | 
+---------+--------+-------+ 
|  1 |  1 | 80 | 
|  1 |  2 | 78 | 
|  2 |  2 | 75 | 
|  2 |  3 | 84 | 
|  3 |  1 | 81 | 
|  3 |  3 | 90 | 
|  4 |  1 | 74 | 
|  4 |  2 | 77 | 
|  5 |  2 | 76 | 
|  5 |  3 | 81 | 
+---------+--------+-------+ 
10 rows in set (0.00 sec) 

mysql> select * from tblcourse; 
+-----------+------------------------+ 
| course_id | course_name   | 
+-----------+------------------------+ 
|   1 | Information Technology | 
|   2 | Computer Science  | 
+-----------+------------------------+ 
2 rows in set (0.00 sec) 

mysql> select * from tblcutoff; 
+-----------+ 
| passgrade | 
+-----------+ 
|  78 | 
+-----------+ 
1 row in set (0.00 sec) 

mysql> select * from tblgrades; 
+---------+--------+-------+ 
| stud_id | sub_id | grade | 
+---------+--------+-------+ 
|  1 |  1 | 80 | 
|  1 |  2 | 78 | 
|  2 |  2 | 75 | 
|  2 |  3 | 84 | 
|  3 |  1 | 81 | 
|  3 |  3 | 90 | 
|  4 |  1 | 74 | 
|  4 |  2 | 77 | 
|  5 |  2 | 76 | 
|  5 |  3 | 81 | 
+---------+--------+-------+ 
10 rows in set (0.00 sec) 

mysql> select * from tblstud; 
+---------+-------------------+--------+-----------+ 
| stud_id | stud_name   | gender | course_id | 
+---------+-------------------+--------+-----------+ 
|  1 | Angelina Jolie | F  |   1 | 
|  2 | Jennifer Garner | F  |   1 | 
|  3 | Liam Neeson  | M  |   2 | 
|  4 | Paul Walker  | M  |   2 | 
|  5 | Jennifer Lawrence | F  |   2 | 
+---------+-------------------+--------+-----------+ 
5 rows in set (0.00 sec) 

mysql> select * from tblsub; 
+--------+------------+ 
| sub_id | sub_name | 
+--------+------------+ 
|  1 | Math 1  | 
|  2 | English 1 | 
|  3 | Filipino 1 | 
+--------+------------+ 
3 rows in set (0.00 sec) 

mysql> 

**

我的第一個問題是有結果 「男」 和 「女」 下的性別.. 任何幫助嗎?非常感謝。

+0

@Luv我無法使存儲過程..我只做到了通SELECT語句,但仍輸出錯誤 – user2628953

+0

內部的功能有沒有辦法從中獲取值3ormore表? – user2628953

+0

謝謝@Luv。 – user2628953

回答

0

修訂

SELECT gender, 
     SUM(failure) `With failure`, 
     COUNT(*) - SUM(failure) `Without failure`, 
     COUNT(*) total 
    FROM 
(
    SELECT s.stud_id, 
     CASE WHEN s.gender = 'M' THEN 'Male' ELSE 'Female' END gender, 
     MAX(CASE WHEN g.grade < c.passgrade THEN 1 ELSE 0 END) failure 
    FROM tblgrades g JOIN tblstud s 
     ON g.stud_id = s.stud_id CROSS JOIN tblcutoff c 
    GROUP BY s.stud_id 
) q 
GROUP BY gender 

輸出示例:

 
| GENDER | WITH FAILURE | WITHOUT FAILURE | TOTAL | 
--------------------------------------------------- 
| Female |   2 |    1 |  3 | 
| Male |   1 |    1 |  2 | 

這裏是SQLFiddle演示

+0

是的,先生..但失敗的計數應該是唯一的。 .student_id採取subj_id ..這意味着失敗計數也必須與主題相結合..stud_id && subj_id – user2628953

+0

@ user2628953它已經「集成」在'tblgrades'表中的這種方式,不是嗎?如果沒有,請詳細解釋你的樣本數據應該怎樣,哪些不應該算作失敗,我們可以修復查詢。 – peterm

+0

說stud_id 4失敗sub_id 1和2,查詢應該只計數這個失敗爲1 ..計數是不依賴於有多少個主題stud_id失敗,但如果stud_id失敗,然後計數 – user2628953

0

您可以使用一個簡單的case語句:

CASE WHEN 'F' THEN SELECT 'Female' ELSE SELECT 'Male' 

Further reading