2016-09-01 2 views
0

У меня есть Mysql запрос гдеИспользование подзапроса в том, условие с использованием псевдонима

Где я есть таблица, как, как показано ниже (Пример данных)

Employee_id Months Salary 
    1   10  200 
    2   20  300 
    3   30  400 

Теперь я хотел найти Количество сотрудников, которые имеющие максимальную общую зарплата (Общая зарплата = месяц * зарплата)

Так у меня есть мой запрос, как этот

подчиненный запрос:

((select max(mon_sal.mc) as max_mc from (
    select months*salary as mc from employee group by employee_id) as mon_sal) 
as max_mon_sal) 

// найти максимум Полного зарплаты

Теперь моя проблема, мне нужно, чтобы найти число лиц, имеющих максимальную зарплату,

select max_mon_sal.max_mc,name 
from employee group by employee_id 
having salary=max_mon_sal.max_mc from (
    (select max(mon_sal.mc) as max_mc from 
     (select months*salary as mc from employee group by employee_id) as mon_sal) 
    as max_mon_sal) 

Его показ Error.I есть проблема с использованием псевдонима max_mon_sal. Пожалуйста, предложите.

+1

Я удалил несовместимые теги базы данных. Не стесняйтесь добавлять тег для используемой базы данных. –

+0

tanx @GordonLinoff – Ramgopal

ответ

-1

я не не уверен, если это то, что ищете, даже лучшее решение для этого случая использовать временные таблицы:

SELECT Employee.employee_id,SUM(MONTHs * salary) 
FROM Employee, 
    ( 
     SELECT MAX(total) value FROM (
      SELECT SUM(MONTHs * salary) as total 
      FROM Employee 
      GROUP BY employee_id 
    ) T 
    ) D 
    GROUP BY Employee.employee_id,D.value 
    HAVING SUM(MONTHs * salary) = D.value 
+0

tanx для предложения ur, но я не могу использовать временную таблицу из-за определенных ограничений. Моя проблема с этим exsisting запросом (Мои подзапросы используются для определения максимальной зарплаты, тогда как мой основной запрос хочет сравнить с этим максимальную зарплату и найти счет зарплаты, соответствующий этому. Я не знаю, как это сравнить в разделе «Оговорка» с использованием псевдонима – Ramgopal

+0

@ Ramgopal «определенные ограничения»? Ухаживать за разработкой? – Strawberry

+0

@Strawberry его не технический, я подготовка к конкурсу программирования, где я не могу создать временную таблицу, просто я не могу ее создать и удалить – Ramgopal

5

Вы можете просто использовать:

select count(*) 
from employee 
where months * salary = (
    select max(months * salary) 
    from employee 
); 
+0

Надеюсь, мы не сможем использовать агрегированные функции там, где условие – Ramgopal

+1

Вполне нормально использовать агрегатную функцию в подзапросе – slaakso

1
SELECT COUNT(*) no_of_employees 
    FROM my_table a 
    JOIN 
    (SELECT MAX(months*salary) total FROM my_table) b 
    ON b.total = a.months * a.salary; 
Смежные вопросы