yeafee@夜飛郎

          it's usually better to solve problems with simplicity and finesse rather than muscle.

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            33 隨筆 :: 3 文章 :: 2 評論 :: 0 Trackbacks
          原發:http://hi.baidu.com/yeafee/blog/item/cc377dd978991ee838012fe2.html
          表內存結構及數據如下:
          CREATE?TABLE?`tscore`?(
          ????`student`?
          varchar(20)?default?NULL,
          ????`subject`?
          varchar(20)?default?NULL,
          ????`score`?
          int(11)?default?NULL
          )?ENGINE
          =MyISAM?DEFAULT?CHARSET=utf8;

          /*?Data?for?the?`tscore`?table????(Records?1?-?6)?*/
          INSERT?INTO?`tscore`?(`student`,?`subject`,?`score`)?VALUES
          ????(
          'B',?'Maths',?87),
          ????(
          'A',?'Maths',?88),
          ????(
          'C',?'Maths',?86),
          ????(
          'A',?'Language',?81),
          ????(
          'B',?'Language',?55),
          ????(
          'A',?'Chemistry',?77);

          根據下列要求,寫出相應的SQL語句:

          a.??????統計每個學生所有課程的平均成績;
          select?student,avg(score)?from?tscore?group?by?student;

          b.?????統計每門課程所有學生的平均成績


          select?subject,avg(score)?from?tscore?group?by?subject;

          c.?????構建具有如下結構的結果集:學生姓名 A課程成績 B課程成績 C課程成績。不可以使用子查詢。


          Oracle HowTo:如何使用Oracle的Decode函數進行多值判斷



          Oracle:

          select?t.subject,
          ?????????
          sum(decode(t.subject,?'A',?t.score,?0))?as?score_a,
          ?????????
          sum(decode(t.subject,?'B',?t.score,?0))?as?score_b,
          ?????????
          sum(decode(t.subject,?'C',?t.score,?0))?as?score_c
          from?????score?t
          group?by?t.student

          MySQL:

          select?student,
          sum(case?when?subject='Maths'?then?score?end)?as?score_maths,
          sum(case?when?subject='Language'?then?score?end)?as?score_language,
          sum(case?when?subject='Chemistry'?then?score?end)????as?score_chemistry
          from?tscore
          group?by?student;

          select?distinct?(a.student),b.score?as?maths,c.score?as?Language,d.score?as?Chemistry
          from?tscore?a
          left?join?tscore?b?on?a.student=b.student?and?b.subject='Maths'
          left?join?tscore?c?on?a.student=c.student?and?c.subject='Language'
          left?join?tscore?d?on?a.student=d.student?and?d.subject='Chemistry'
          order?by?a.student;


          d.?????假設60分為及格,統計每門課程參加考試的學生的數量,及格的學生數,以及通過率(在一條SQL語句中)


          Oracle:

          select?a.*,?a.pass_count/a.total_count?as?pass_rate
          from?(select????t.subject,?count(t.subject)?as?total_count,?sum(decode(sign(t.score-60),1,1[,0,1,]0))?as?pass_count
          from??????score?t
          group?????by?t.subject)?a

          MySQL:

          select?a.*,a.passCount/a.totalCount?as?passRate?from
          (
          select?subject,COUNT(subject)?as?totalCount,sum(case?when?(sign(score-60)>=0)?then?1?end)?as?passCount
          from?tscore
          group?by?subject
          )a;


          Oracle SQL 內置函數大全(一)、(二)、(三)


          SIGN
          取數字n的符號,大于0返回1,小于0返回-1,等于0返回0
          SQL> select sign(123),sign(-100),sign(0) from dual;

          SIGN(123) SIGN(-100)?? SIGN(0)
          --------- ---------- ---------
          1???????? -1???????? 0

          INSERT INTO .. .SELECT...FROM復制

          CREATE?TABLE?tmp_user?AS?select?*?from?user?where?1=2;
          INSERT INTO user SELECT * FROM tmp_user;
          posted on 2007-07-11 11:02 @yeafee 閱讀(226) 評論(0)  編輯  收藏 所屬分類: 數據庫
          主站蜘蛛池模板: 邯郸市| 黎城县| 尉犁县| 修水县| 阜平县| 嵩明县| 囊谦县| 乐安县| 漯河市| 云霄县| 洪江市| 井研县| 南城县| 三江| 措勤县| 驻马店市| 丰台区| 许昌市| 大名县| 巩义市| 离岛区| 溧阳市| 永昌县| 新建县| 河池市| 浪卡子县| 连南| 磴口县| 临泉县| 诏安县| 麻栗坡县| 南涧| 连南| 喀喇| 万全县| 宜君县| 克拉玛依市| 龙口市| 敖汉旗| 曲靖市| 仪征市|