屏幕截图显示了参考表。
我的目标是检索日期 20150131
的每州最低工资我试过这段代码
select
s.Descrip,
MIN(Salary) AS Minimum_per_state,
MAX(Salary) AS Maximum_per_state,
AVG(Salary) AS Average_per_state
from
(select
Month_ending,
Emp_id,Salary,
Descrip
from
Dim_state
full join
Dim_city ON Dim_state.State_id = Dim_city.State_id
full join
Employee_details ON Dim_city.City_id = Employee_details.City_id
where
Month_ending = 20150131) s
GROUP BY
Descrip
但是我得到了这个输出:
description min_sal max_sal avg_sal
Delhi 30000 34000 32000
maharastra 25000 35000 30000
tamil nadu 35000 50000 42000
Westbengal 25000 50000 37500
问题是班加罗尔和果阿失踪了。
我可以知道哪个部分出了问题吗?
答案 0 :(得分:1)
其实你错过了这一点。 dim_state有 PK 所以当dim_city有 FK 时会在左侧,所以这将在右侧,所以make 右连接
SELECT ds.descip
,min(salary) min_salary
,max(salary) max_salary
,avg(salary) avg_salary
FROM dim_state ds
RIGHT JOIN dim_city dc ON ds.state_id = dc.state_id
FULL JOIN employee_details ed ON ed.city_id = dc.city_id
WHERE Month_ending = 20150131
GROUP BY ds.descip
答案 1 :(得分:0)
您有内部查询的结果是什么?
你可以直接试试这个(只是使用左连接并且没有使用内部查询)?
SELECT ds.descip
,min(salary) min_salary
,max(salary) max_salary
,avg(salary) avg_salary
FROM dim_state ds
LEFT JOIN dim_city dc ON ds.state_id = dc.state_id
LEFT JOIN employee_details ed ON ed.city_id = dc.city_id
WHERE Month_ending = 20150131
GROUP BY ds.descip
答案 2 :(得分:0)
当您使用FULL,LEFT或RIGHT JOIN时,连接顺序也很重要。
SELECT ds.descip
,min(salary) min_salary
,max(salary) max_salary
,avg(salary) avg_salary
FROM employee_details ed
LEFT JOIN dim_city dc ON ed.city_id= dc.city_id
LEFT JOIN dim_state ed ON dc.state_id = dc.state_id
WHERE Month_ending = 20150131
GROUP BY ds.descip