2013-12-15 36 views
5

Tôi có hai bảng với các lĩnh vực sauSQL chọn truy vấn sử dụng tham gia, nhóm bằng và chức năng tổng hợp

emp_table: emp_id, emp_name 
salary_increase: emp_id, inc_date, inc_amount 

Tôi cần phải viết một truy vấn mà cung cấp cho các chi tiết nhân viên, số lần một nhân viên đã nhận được tăng lương, giá trị của số tiền tăng tối đa và ngày tăng đó. Dưới đây là những gì tôi có cho đến thời điểm này:

SELECT e.*, count(i.inc_amount), max(i.inc_amount) 
FROM salary_increase AS i 
RIGHT JOIN emp_table AS e 
ON i.emp_id=e.emp_id 
GROUP BY e.emp_id; 

chính xác điều này cung cấp tất cả các yêu cầu ngoài ngày tăng tối đa được trao. Tôi đã thử những điều sau đây mà không thành công:

SELECT e.*, count(i.inc_amount), max(inc_amount), t.inc_date 
FROM salary_increase AS i 
RIGHT JOIN emp_table AS e 
ON i.emp_id=e.emp_id 
RIGHT JOIN 
    (
    SELECT emp_id, inc_date FROM salary_increase 
    WHERE inc_amount=max(inc_amount) GROUP BY emp_id 
    ) AS t 
ON e.emp_id=t.emp_id 
GROUP BY e.emp_id; 

điều này cho lỗi 'Sử dụng chức năng nhóm không hợp lệ'. Có ai biết tôi đang làm gì sai không?

Trả lời

4

Bạn không thể làm điều này WHERE inc_amount=max(inc_amount) trong mệnh đề where, hoặc sử dụng HAVING hoặc làm điều đó trong điều kiện tham gia, hãy thử này để thay thế:

SELECT 
    e.emp_id, 
    e.inc_date, 
    t.TotalInc, 
    t.MaxIncAmount 
FROM salary_increase AS i 
INNER JOIN emp_table AS e ON i.emp_id=e.emp_id 
INNER JOIN 
(
    SELECT 
    emp_id, 
    MAX(inc_amount)  AS MaxIncAmount, 
    COUNT(i.inc_amount) AS TotalInc 
    FROM salary_increase 
    GROUP BY emp_id 
) AS t ON e.emp_id = t.emp_id AND e.inc_amount = t.MaxIncAmount; 
Các vấn đề liên quan