我無法找到一種優雅的方式來完成示例查詢。我已經接近了,但我認為我的答案不正確。
這是一段代碼,概述了我們將使用的表格:
create table instructor
(ID varchar(5),
name varchar(20) not null,
dept_name varchar(20),
salary numeric(8,2) check (salary > 29000),
primary key (ID),
foreign key (dept_name) references department(dept_name)
on delete set null
) ENGINE = INNODB;
這是我正在使用的表中的示例資料:
insert into instructor values ('10101', 'Srinivasan', 'Comp. Sci.', '65000');
insert into instructor values ('12121', 'Wu', 'Finance', '90000');
insert into instructor values ('15151', 'Mozart', 'Music', '40000');
insert into instructor values ('22222', 'Einstein', 'Physics', '95000');
insert into instructor values ('32343', 'El Said', 'History', '60000');
insert into instructor values ('33456', 'Gold', 'Physics', '87000');
insert into instructor values ('45565', 'Katz', 'Comp. Sci.', '75000');
insert into instructor values ('58583', 'Califieri', 'History', '62000');
insert into instructor values ('76543', 'Singh', 'Finance', '80000');
insert into instructor values ('76766', 'Crick', 'Biology', '72000');
insert into instructor values ('83821', 'Brandt', 'Comp. Sci.', '92000');
我正在尋找的查詢是: 3. 對于每個講師,他們的姓名、薪水以及收入比他們多的講師的數量。
我對此的原始答案是:
Select DISTINCT T.ID, T.name, T.salary, count(S.ID) as num FROM instructor as T, instructor as S Where S.salary>T.salary group by T.ID;
這回傳接近我正在尋找的東西。它會回傳每位教師的名單、他們的薪水以及收入比他們多的教師數量,但它會忽略收入最高的名為“愛因斯坦”的教師,因為沒有人能比他掙得更??多。有沒有辦法將此講師添加到回傳的關系中,計數為“0”?
uj5u.com熱心網友回復:
您可以像這樣使用子查詢
select i.id,i.name,i.salary,
(select count(*) from instructor as i2 where i2.salary>i.salary and i2.id<>i.id) as COUNT_HIGHER
from instructor as i
uj5u.com熱心網友回復:
您的查詢沒有回傳 Einstein,因為您的 where 子句是S.salary>T.salary因為沒有人比他掙得更??多,所以他被過濾掉了。
要包括在內,您可以將其更改為S.salary>=T.salary并從 count 中減去 1 以給出正確的結果。
Select DISTINCT T.ID, T.name, T.salary, count(S.ID)-1 as num
FROM instructor as T, instructor as S
Where S.salary>=T.salary
group by T.ID;
uj5u.com熱心網友回復:
首先,您不應該將distinct與group by一起使用,因為分組意味著每一行都是不同的。
您的邏輯不正確,因為如果我正確理解您的問題,您不是在嘗試過濾行,而是僅計算行數。
以下相關聚合應為您提供預期的結果:
select Id, Name, Salary,
(select Count(*) from instructor ii where ii.salary > i.salary) as num
from instructor i;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/443528.html
上一篇:將熊貓資料框轉換為布林值
