(說明,參考的網上的文章,自己做了測試)
問題:
表1
學校 年級 班級 姓名 性別 年齡
1中 1 2班 張 男 20 --這個曲調
2中 3 1班 馬 男 17
1中 2 2班 李 女 16
2中 3 5班 張 男 15
2中 3 6班 李 女 18 -- 這個取掉
當姓名和性別相同的時候,取年齡最小的 一條記錄
查詢的結果是
學校 年級 班級 姓名 性別 年齡
2中 3 1班 馬 男 17
1中 2 2班 李 女 16
2中 3 5班 張 男 15
--------創建測試環境---------
declare ta table (學校 varchar(10),年級 int,班級 varchar(10),姓名 varchar(10),性別 varchar(10),年齡 int)
create table ta(學校 varchar(10),年級 int,班級 varchar(10),姓名 varchar(10),性別 varchar(10),年齡 int)
insert into ta values('1中', 1, '2班', '張', '男', 20)
insert into ta values('2中', 3, '1班', '馬', '男', 17)
insert into ta values('1中', 2, '2班', '李', '女', 16)
insert into ta values('2中', 3, '5班', '張', '男', 15)
insert into ta values('2中', 3, '6班', '李', '女', 18)
*******答案 一 (認爲非常好,簡單,易懂)********
select a.* from ta a
inner join
(select 姓名,性別 , min(年齡) 年齡 from ta group by 姓名,性別) b
on a.姓名 = b.姓名 and a.性別 = b.性別 and a.年齡 = b.年齡 order by a.學校
查詢結果
*********答案二(原來 having還可以這樣啊)*******
select * from ta t
group by 學校,年級,班級,姓名,性別,年齡
having
年齡=(select min(年齡) from ta where 姓名 = t.姓名 and 性別 = t.性別)
order by 班級