Maison > Questions et réponses > le corps du texte
J'ai 3 tables : training_schedules, training_discounts et agents. training_schedules : identifiant, nom, agent_id, prix. training_discounts : id, agent_id, planning_id, remise. Agent : pièce d'identité, nom
J'ai essayé de soustraire le prix de la table training_schedules en utilisant la colonne discounts de la table training_discounts comme ceci :
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;
Mais non, même si l'agent_id est le même, le prix de la colonne totale est toujours le même qu'avant. Qu'est-ce qui ne va pas avec ma requête ? Voici le SQLfiddle si vous en avez besoin : http://sqlfiddle.com/#!9/0cd42d/1/0
P粉1119279622024-04-06 00:04:01
Vous n'avez pas besoin d'utiliser group by
car vous n'utilisez aucune fonction d'agrégation.
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;
Vous utilisez également la fonction select case
。另一种选择是使用 mysql if()
de manière incorrecte.
if(agent_id = 2, price - td.discount, price) as total