1
我正在建立一個假日系統,其中一個功能是可以購買額外的假期,你可以在一年中的幾個點上做,所以我想看到總數天假期,預訂了多少,每個用戶購買了多少。MySQL總和不正確,並加入
我做一個查詢
SELECT hr_user.name AS username,
hr_user.user_id,
SUM(working_days) AS daysbooked,
sum(hr_buyback.days) AS daysbought
FROM hr_leave
inner join hr_user on hr_user.user_id = hr_leave.user_id
left outer join hr_buyback on hr_buyback.user_id = hr_user.user_id
where active = 'y'
and hr_leave.start_date between '2012-01-01' and '2012-12-31'
and (hr_leave.status = 'approved' OR hr_leave.status = 'pending')
GROUP BY hr_user.name, hr_user.user_id
現在,這是帶回導致daysbought列waaaay比我所期待的更高,這是奇怪的,因爲當我擺脫總和,只是有hr_buyback .days它顯示了所有我期望的(除了我寧願他們總結)的各個值
其次,在MySQL中,你可以做你可以在MSSQL是
left outer join hr_buyback on (select hr_buyback.user_id where buy_sell = 'buy') = hr_leave.user_id
?
相關表定義(我認爲這是什麼意思?):
hr_buyback
buyback_id int(11) NO PRI auto_increment
user_id int(11) NO
days int(11) NO
buy_sell varchar(10) NO
status varchar(10) NO pending
year int(11) NO
hr_user
user_id int(11) NO PRI auto_increment
name varchar(40) NO
email varchar(40) NO UNI
level int(5) YES
manager_id int(11) NO
team_id int(11) YES
active varchar(2) NO y
holidays_day int(11) NO
start_date timestamp NO CURRENT_TIMESTAMP
password varchar(60) NO
division_id int(11) YES
day_change int(5) NO 0
priv_hours varchar(2) NO n
po_level int(2) YES 0
po_signoff int(10) YES
hr_leave
leave_id int(11) NO PRI auto_increment
user_id int(11) NO
start_date date NO
end_date date NO
day_type varchar(10) NO
status varchar(20) NO pending
working_days varchar(5) NO
leave_type int(11) NO
cancel int(11) NO 0
date timestamp NO CURRENT_TIMESTAMP
你能包括你的表定義嗎? – doublesharp
第二個代碼段缺少一個'FROM'子句。我會以不同的格式寫入,但是 - MySQL支持嵌入式視圖/派生表。 –
@doublesharp added – franglais