我有 3 個表:training_schedules、training_discounts 和代理程式。 training_schedules:id、名稱、agent_id、價格。 training_discounts:id、agent_id、schedule_id、折扣。 代理:ID、姓名
我嘗試使用training_discounts表中的折扣列從training_schedules表中減去價格,如下所示:
SELECT ts.id, name, training_types, DATE_FORMAT(date_start ,'%d/%m/%Y') as date_start, DATE_FORMAT(date_end ,'%d/%m/%Y') as date_end, quota, price, td.discount, CASE price WHEN td.agent_id = 2 THEN (price - td.discount) ELSE price END as total FROM training_schedules ts LEFT JOIN training_discounts td on ts.id = td.schedule_id GROUP BY td.schedule_id;
但不對,即使agent_id相同,總列的價格仍然與之前相同。我的查詢可能有什麼問題?如果需要的話,這是 SQLfiddle:http://sqlfiddle.com/#!9/0cd42d/1/0
P粉1119279622024-04-06 00:04:01
您不需要使用group by
,因為您沒有使用任何聚合函數。
SELECT ts.id , name , training_types , DATE_FORMAT(date_start ,'%d/%m/%Y') as date_start , DATE_FORMAT(date_end ,'%d/%m/%Y') as date_end , quota, price , td.discount , CASE WHEN td.agent_id = 2 THEN price - td.discount ELSE price END as total FROM training_schedules ts LEFT JOIN training_discounts td on ts.id = td.schedule_id;
您也錯誤地使用了select case
。另一個選擇是使用 mysql if()
函數。
if(agent_id = 2, price - td.discount, price) as total