2017-02-13 6 views
0

次の質問に答えるには問題があります。グループの最大数を検索する

Studentテーブルに表示される各年齢の値について、 が最も頻繁に表示されるレベル値を見つけます。たとえば、SR、 JR、または18歳のSO人以上の18歳以上のFRレベルの学生がいる場合は、ペア(18、FR)を印刷する必要があります。

このデータセットです。

create database university; 
use university; 

create table student(
    snum decimal(9) primary key, 
    sname varchar(30), 
    major varchar(25), 
    level varchar(2), 
    age int 
    ); 
create table faculty(
    fid decimal(9) primary key, 
    fname varchar(30), 
    deptid decimal(2) 
    ); 
create table class(
    cname varchar(40) primary key, 
    meets_at varchar(20), 
    room varchar(10), 
    fid decimal(9), 
    foreign key(fid) references faculty(fid) 
    ); 
create table enrolled(
    snum decimal(9), 
    cname varchar(40), 
    primary key(snum,cname), 
    foreign key(snum) references student(snum), 
    foreign key(cname) references class(cname) 
    ); 

insert into student values(051135593,'Maria White','English','SR',21); 
insert into student values(060839453,'Charles Harris','Architecture','SR',22); 
insert into student values(099354543,'Susan Martin','Law','JR',20); 
insert into student values(112348546,'Joseph Thompson','Computer Science','SO',19); 
insert into student values(115987938,'Christopher Garcia','Computer Science','JR',20); 
insert into student values(132977562,'Angela Martinez','History','SR',20); 
insert into student values(269734834,'Thomas Robinson','Psychology','SO',18); 
insert into student values(280158572,'Margaret Clark','Animal Science','FR',18); 
insert into student values(301221823,'Juan Rodriguez','Psychology','JR',20); 
insert into student values(318548912,'Dorthy Lewis','Finance','FR',18); 
insert into student values(320874981,'Daniel Lee','Electrical Engineering','FR',17); 
insert into student values(322654189,'Lisa Walker','Computer Science','SO',17); 
insert into student values(348121549,'Paul Hall','Computer Science','JR',18); 
insert into student values(351565322,'Nancy Allen','Accounting','JR',19); 
insert into student values(451519864,'Mark Young','Finance','FR',18); 
insert into student values(455798411,'Luis Hernandez','Electrical Engineering','FR',17); 
insert into student values(462156489,'Donald King','Mechanical Engineering','SO',19); 
insert into student values(550156548,'George Wright','Education','SR',21); 
insert into student values(552455318,'Ana Lopez','Computer Engineering','SR',19); 
insert into student values(556784565,'Kenneth Hill','Civil Engineering','SR',21); 
insert into student values(567354612,'Karen Scott','Computer Engineering','FR',18); 
insert into student values(573284895,'Steven Green','Kinesiology','SO',19); 
insert into student values(574489456,'Betty Adams','Economics','JR',20); 
insert into student values(578875478,'Edward Baker','Veterinary Medicine','SR',21); 
insert into faculty values(142519864,'Ivana Teach',20); 
insert into faculty values(242518965,'James Smith',68); 
insert into faculty values(141582651,'Mary Johnson',20); 
insert into faculty values(011564812,'John Williams',68); 
insert into faculty values(254099823,'Patricia Jones',68); 
insert into faculty values(356187925,'Robert Brown',12); 
insert into faculty values(489456522,'Linda Davis',20); 
insert into faculty values(287321212,'Michael Miller',12); 
insert into faculty values(248965255,'Barbara Wilson',12); 
insert into faculty values(159542516,'William Moore',33); 
insert into faculty values(090873519,'Elizabeth Taylor',11); 
insert into faculty values(486512566,'David Anderson',20); 
insert into faculty values(619023588,'Jennifer Thomas',11); 
insert into faculty values(489221823,'Richard Jackson',33); 
insert into faculty values(548977562,'Ulysses Teach',20); 
insert into class values('Data Structures','MWF 10','R128',489456522); 
insert into class values('Database Systems','MWF 12:30-1:45','1320 DCL',142519864); 
insert into class values('Operating System Design','TuTh 12-1:20','20 AVW',489456522); 
insert into class values('Archaeology of the Incas','MWF 3-4:15','R128',248965255); 
insert into class values('Aviation Accident Investigation','TuTh 1-2:50','Q3',011564812); 
insert into class values('Air Quality Engineering','TuTh 10:30-11:45','R15',011564812); 
insert into class values('Introductory Latin','MWF 3-4:15','R12',248965255); 
insert into class values('American Political Parties','TuTh 2-3:15','20 AVW',619023588); 
insert into class values('Social Cognition','Tu 6:30-8:40','R15',159542516); 
insert into class values('Perception','MTuWTh 3','Q3',489221823); 
insert into class values('Multivariate Analysis','TuTh 2-3:15','R15',090873519); 
insert into class values('Patent Law','F 1-2:50','R128',090873519); 
insert into class values('Urban Economics','MWF 11','20 AVW',489221823); 
insert into class values('Organic Chemistry','TuTh 12:30-1:45','R12',489221823); 
insert into class values('Marketing Research','MW 10-11:15','1320 DCL',489221823); 
insert into class values('Seminar in American Art','M 4','R15',489221823); 
insert into class values('Orbital Mechanics','MWF 8','1320 DCL',011564812); 
insert into class values('Dairy Herd Management','TuTh 12:30-1:45','R128',356187925); 
insert into class values('Communication Networks','MW 9:30-10:45','20 AVW',141582651); 
insert into class values('Optical Electronics','TuTh 12:30-1:45','R15',254099823); 
insert into class values('Intoduction to Math','TuTh 8-9:30','R128',489221823); 
insert into enrolled values(112348546,'Database Systems'); 
insert into enrolled values(115987938,'Database Systems'); 
insert into enrolled values(348121549,'Database Systems'); 
insert into enrolled values(322654189,'Database Systems'); 
insert into enrolled values(552455318,'Database Systems'); 
insert into enrolled values(455798411,'Operating System Design'); 
insert into enrolled values(552455318,'Operating System Design'); 
insert into enrolled values(567354612,'Operating System Design'); 
insert into enrolled values(112348546,'Operating System Design'); 
insert into enrolled values(115987938,'Operating System Design'); 
insert into enrolled values(322654189,'Operating System Design'); 
insert into enrolled values(567354612,'Data Structures'); 
insert into enrolled values(552455318,'Communication Networks'); 
insert into enrolled values(455798411,'Optical Electronics'); 
insert into enrolled values(301221823,'Perception'); 
insert into enrolled values(301221823,'Social Cognition'); 
insert into enrolled values(301221823,'American Political Parties'); 
insert into enrolled values(556784565,'Air Quality Engineering'); 
insert into enrolled values(099354543,'Patent Law'); 
insert into enrolled values(574489456,'Urban Economics'); 

私の最高の試みである、正しいです:

select age, level from (select age, level, count(level) as levelCount from student group by age, level order by age, levelCount desc) as counts group by age; 

しかし、すべての選択した値が、私は外で実行しないでグループ、しなければならない場合には、標準SQLのルールを破る最も文、レベルを選択します。私は集計されていないデータを返すMySQlの機能を利用しています。

質問は、標準のSQLベストプラクティスに準拠しながら、グループから作成された各グループのカウントの最大値を返す方法です。

select age, level, count(level) as levelCount from student group by age, level order by age, levelCount desc; 

してくださいとは、これは、MySQLの痛みでお

+0

この宿題はありますか? – jperelli

+0

好奇心の外に、それは重要ですか? –

+0

はい、それに応じて、回答は異なるでしょう。 http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questionsを参照してください。 – jperelli

答えて

0

に感謝します。 1つの方法は変数を使用することです。

select age, 
     substring_index(group_concat(level order by levelCount desc), ',', 1) as mode_level 
from (select age, level, count(level) as levelCount 
     from student 
     group by age, level 
     order by age, levelCount desc 
    ) as counts 
group by age; 

(あなたが探しているものを統計的には、modeと呼ばれる。)

注:これはトリックですが、最も簡単な方法は、group_concat()/substring_index()トリックを使用しています。 group_concat()の中間スペースは、デフォルトでは1,024文字です。そのため、領域外/オーバーフローエラーが発生する可能性があります。この制限は容易に増加する。

+0

それは素晴らしいです、今日何かを学んだ。ありがとう。 –

+0

私は組み込み関数について何かを探しましたが、これは知っておくと良いことです。グループのmax(count/sum/etc)の制限のようなもの。 –

+0

一般に、別のアプローチでは、その質問に答えることは何でしょうか?私は全体的に簡単な方法があるかもしれないと感じますが、私はウサギの穴を1つ下って行き、ちょうどそれについていました。 @BryanBirchmeier。 –

関連する問題