一道sql面試題的求解方法
統計出每個教師每門課的及格人數和及格率
create table rock (教師ID number,學生ID number,學科名稱 varchar2(40),成績 number);
insert into rock values(1,1,'數學',80);
insert into rock values(1,2,'數學',50);
insert into rock values(2,3,'英語',61);
insert into rock values(2,4,'英語',59);
insert into rock values(3,5,'語文',62);
insert into rock values(3,6,'語文',58);
insert into rock values(1,7,'數學',81);
commit;
SQL> select * from rock;
教師ID 學生ID 學科名稱 成績
---------- ---------- ---------------------------------------- ----------
1 1 數學 80
1 2 數學 50
2 3 英語 61
2 4 英語 59
3 5 語文 62
3 6 語文 58
1 7 數學 81
7 rows selected
第一種寫法
第二種寫法: 用count()分析函式PHP code:
SQL> select a.教師ID,
2 a.學科名稱,
3 a.及格人數,
4 round( a.及格人數 / 總人數 *100) ||'%' as 及格率
5 from (select 教師ID, 學科名稱, count(*) as 及格人數
6 from rock
7 where 成績 >= 60
8 group by 教師ID, 學科名稱) a,
9 (select 教師ID, 學科名稱, count(*) as 總人數
10 from rock
11 group by 教師ID, 學科名稱) b
12 where a.教師ID = b.教師ID
13 and a.學科名稱 = b.學科名稱
14 ;
教師ID 學科名稱 及格人數 及格率
---------- ---------------------------------------- ---------- -----------------------------------------
1 數學 2 67%
2 英語 1 50%
3 語文 1 50%
PHP code:> select a.教師ID,
SQL
2 a.學科名稱,
3 a.及格人數,
4 round( a.及格人數 / 總人數 *100) ||'%' as 及格率
5 from
6 (select distinct 教師ID, 學科名稱,count(學生ID) over(partition by 教師ID, 學科名稱 order by 教師ID) 及格人數
7 from rock
8 where 成績>=60) a,
9 (select distinct 教師ID, 學科名稱,count(學生ID) over(partition by 教師ID, 學科名稱 order by 教師ID) 總人數
10 from rock) b
11 where a.教師ID = b.教師ID
12 and a.學科名稱 = b.學科名稱
13 ;
教師ID 學科名稱 及格人數 及格率
---------- ---------------------------------------- ---------- -----------------------------------------
1 數學 2 67%
2 英語 1 50%
3 語文 1 50%
第三種寫法: with寫法
SQL>
SQL> WITH A AS (select 教師ID,學科名稱,COUNT(教師ID) 及格人數
2 FROM ROCK
3 WHERE 成績>=60
4 GROUP BY 教師ID,學科名稱),
5 B AS (SELECT 教師ID,學科名稱,COUNT(學科名稱) 人數 FROM ROCK
6 GROUP BY 教師ID,學科名稱
7 ORDER BY 教師ID,學科名稱)
8 select A.*,ROUND(A.及格人數/B.人數*100,2)||'%' 及格率 FROM A,B
9 WHERE A.教師ID=B.教師ID AND A.學科名稱=B.學科名稱
10 ;
教師ID 學科名稱 及格人數 及格率
---------- ---------------------------------------- ---------- -----------------------------------------
1 數學 2 66.67%
2 英語 1 50%
3 語文 1 50%
如果還有更好的寫法請列出來 謝謝
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-247873/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一道hibernate面試題,求解?面試題
- 一道sql面試題的解答SQL面試題
- SQL面試題一道(偏實際業務)SQL面試題
- 一道面試題面試題
- 一道面試題的分析面試題
- 一道SQL題SQL
- 一道簡單的分配演算法題,求解演算法
- 一道面試題引起的思考面試題
- 分享一道昨天的面試題面試題
- mysql一道面試題MySql面試題
- 面試三輪我倒在了一道sql題上——sql效能優化面試SQL優化
- 測試面試題目求解答面試題
- 分享一道Go面試必考的題Go面試
- 一道面試題引發的“血案”面試題
- 一道面試題引發的思考面試題
- 一道以前看過的面試題面試題
- 【理解】一道 JS 面試題JS面試題
- 一道騷面試題目面試題
- 解析一道JS面試題JS面試題
- 一道與 for 相關的字串面試題字串面試題
- 關於PHP字串的一道面試題PHP字串面試題
- 聊聊一道簡單的javascript面試題JavaScript面試題
- 從 Google 的一道面試題說起·Go面試題
- 一道 JS 面試題引發的思考JS面試題
- 一道面試題目引發的思考面試題
- 由一個博問學到的SQL查詢方法 (一道多對多關係查詢的面試題)SQL面試題
- 一道面試題:去重排序面試題排序
- iOS 每天一道面試題iOS面試題
- 一道柯里化面試題面試題
- 一道java面試基礎題Java面試
- 幫忙解答一道面試題面試題
- 一道小學題的sql實現~~~SQL
- 高等數學隨記 - 一道極限計算題的簡化求解
- 從一道面試題探究 Integer 的實現面試題
- 論一道面試題引起的思考(總結)面試題
- 一道賦值面試題引發的思考賦值面試題
- 深度解析某頭條的一道面試題面試題
- 一道面試題看 HashMap 的儲存方式面試題HashMap