一條檢驗SQL基礎的語句!

來源:互聯網
上載者:User
資料表:student_id,name,age,class_id,group_id
[學生id][姓名][年齡][班級id][組id]
用一條sql語句
1.求低於組平均年齡的人數比率在50%以下的那些組所在班級中高於班級平均年齡的學生

2.求組內最大年齡和最小年齡的學生既不是班級最大又不是班級最小的那些組所在班級的平均年齡

解法1:

SELECT students.name
FROM 
 (/*由學生集合向班級平均年齡集合進行一次投影,求出高於班級平均年齡的學生*/
 SELECT students.name,students.class_id,students.group_id FROM students 
 INNER JOIN (/*此處求出現有學生所在的各個班級的平均年齡*/SELECT class_id,AVG(age) AS avgage FROM students GROUP BY class_id) students_1 
 ON students.class_id=students_1.class_id AND students.age>students_1.avgage
 ) students
INNER JOIN  /*由高於班級平均年齡的學生集合向低於組平均年齡的人數比率在50%以下的那些組進行投影*/
 (
 SELECT students_0.group_id
 FROM (/*現有學生所在組中每組的總人數*/select group_id,count(student_id) NumberOfGroup from students group by group_id) students_0
 INNER JOIN
  (/*學生集合向學生所在組的平均年齡集合進行一次投影,求出每組低於平均年齡的人數*/
  SELECT students.group_id,COUNT(students.student_id) AS Number FROM students 
  INNER JOIN(SELECT group_id,AVG(age) AS avgage FROM students GROUP BY group_id) students_1 
  ON students.group_id=students_1.group_id AND students.age<students_1.avgage
  GROUP BY students.group_id
  ) students_1 
 ON students_0.group_id=students_1.group_id
 /*篩選出低於平均年齡人數比率在50%以下的那些組*/
 where CAST(Number AS float)/CAST(NumberOfGroup AS float)<0.5
 ) 
 Groups
ON students.group_id=Groups.group_id

---------------------------------

解法2:

1.求低於組平均年齡的人數比率在50%以下的那些組所在班級中高於班級平均年齡的學生
Select * From school y Where age>(Select AVG(age) From school Where class_id=y.class_id) And class_id In (Select class_id From School x Where (Select Count(1) From school Where age<(Select AVG(age) From school Where group_id=x.group_id) And group_id=x.group_id)/(Select Count(1) From school Where group_id=x.group_id) <0.5)

2.求組內最大年齡和最小年齡的學生既不是班級最大又不是班級最小的那些組所在班級的平均年齡
Select class_id,AVG(age) From school x Where (Select Min(age) From school Where group_id=x.groupid And class_id=x.class_id)<>(Select Min(age) From school Where class_id=x.class_id) And (Select Max(age) From school Where group_id=x.groupid And class_id=x.class_id)<>(Select Max(age) From school Where class_id=x.class_id) Group By class_id

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.