Ik heb 2 tabellen. De ene tabel is 'adverts' en de andere tabel 'advertsitems'. Het is een one to many relatie dus er kunnen meerdere items aan een advert hangen.
De volgende query heb ik nu
SELECT a.title AS adtitle, a.id AS adid, a.price, a.image AS image, a.description, SUM(ai.quantity) as quantity, a.shipping, a.customs, a.createdate, a.image
FROM adverts a
LEFT JOIN advertsitems ai ON a.id = ai.advertid
WHERE 1=1 AND ai.country LIKE '%AF%'
GROUP BY a.id
ORDER BY a.id DESC
Zoals je ziet telt 'SUM(ai.quantity)' de hoeveelheid. Zonder de WHERE conditie 'AND ai.country LIKE' krijg ik als result bijvoorbeeld 6 en met deze WHERE conditie 2. Nu wil ik dus twee SUMS terug krijgen. De eerste SUM die telt aan de hand van ai.country staat er al. Nu wil ik een tweede SUM hebben die alleen naar de GROUP BY a.id luistert dus dat ik 2 en 6 terug krijgt uit dezelfde query in 2 aparte kolommen.
Notitie: WHERE 1=1 staat erin omdat de query dynamisch gebuild wordt en dit makkelijker is om voor mij WHERE conditions te plaatsen.
Ik heb het artikel gelezen maar kom niet verder. Als jij weet hoe ik dit moet oplossen in mijn query hoor ik dat graag! iig bedankt voor het reageren :)
Dat werkt helaas niet omdat de WHERE condition 'ai.country LIKE' van toepassing is. Ik zoek dus een oplossing om een SUM te doen zonder de WHERE condition maar alleen op basis van de GROUP BY (dus a.id = ai.advertid)
SELECT a.title AS adtitle, a.id AS adid, a.price, a.image AS image, a.description, SUM( ai.quantity ) AS quantity, a.shipping, a.customs, a.createdate, a.image, SUM( ai.quantity * ( ai.country LIKE '%AF%' ) ) AS quantity2
FROM adverts a
LEFT JOIN advertsitems ai ON a.id = ai.advertid
WHERE 1 =1
AND ai.country LIKE '%AF%'
GROUP BY a.id
ORDER BY a.id DESC
Ik krijg het niet voor elkaar, ik krijg het volgende
quantity = 2
quantity2 = 2
Terwijl quantity2 6 moet returnen.
SELECT a.title AS adtitle, a.id AS adid, a.price, a.image AS image, a.description,
SUM(ai.quantity) as totalquantity,
SUM(CASE WHEN ai.country LIKE '%AF%' THEN quantity ELSE 0 END) as quantity,
a.shipping, a.customs, a.createdate, ai.country
FROM adverts a
LEFT JOIN advertsitems ai ON a.id = ai.advertid
WHERE 1=1
GROUP BY a.id
HAVING ai.country LIKE '%AF%'
ORDER BY a.id DESC
SELECT a.title AS adtitle, a.id AS adid, a.price, a.image AS image, a.description,
SUM(ai.quantity) as totalquantity,
SUM(CASE WHEN ai.country LIKE '%AF%' THEN quantity ELSE 0 END) as quantity,
a.shipping, a.customs, a.createdate, ai.country
FROM adverts a
LEFT JOIN advertsitems ai ON a.id = ai.advertid
WHERE 1=1
GROUP BY a.title AS adtitle, a.id AS adid, a.price, a.image AS image, a.description,
a.shipping, a.customs, a.createdate, ai.country
ORDER BY a.id DESC