Как преодолеть ошибку Подзапрос возвращает более 1 строки в Mysql - PullRequest
1 голос
/ 01 августа 2020

Я хочу найти имена всех сотрудников, которые зарабатывают больше, чем средняя зарплата всех сотрудников их компании .

Это база данных

create table works(
employee_name varchar (100) primary key,
company_name varchar (100),
salary int (6) );

Это код, который я использовал,

select employee_name
from works
where salary > (select avg(salary) from works group by company_name)
group by company_name;

Ответы [ 2 ]

5 голосов
/ 01 августа 2020

Вместо group by в подзапросе вам просто нужно предложение where:

SELECT employee_name
FROM works w
WHERE salary > (select avg(salary) from works w2 where w2.company_name = w.company_name);
1 голос
/ 01 августа 2020

Вам не нужна группа by во внешнем выборе, но вы должны добавить предложение where к внутреннему select.

create table works(
employee_name varchar (100) primary key,
company_name varchar (100),
salary int (6) );
INSERT INTO works VALUES ('a','comp A',100),('a2','comp A',150),('a3','comp A',250),('a4','comp B',100)
,('a5','comp B',300),('a6','comp B',200)
select employee_name,company_name,salary
from works w1
where salary >= (select avg(salary) avgsal from works w2 WHERE w1.company_name = w2.company_name 
group by company_name
)
;
employee_name | company_name | salary
:------------ | :----------- | -----:
a3            | comp A       |    250
a5            | comp B       |    300
a6            | comp B       |    200
select avg(salary) avgsal from works w2  
group by company_name
|   avgsal |
| -------: |
| 166.6667 |
| 200.0000 |

db <> fiddle здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...