Sql SUM忽略WHERE,而不是GROUP BY
我有两个表,Sql SUM忽略WHERE,而不是GROUP BY,sql,join,group-by,sum,Sql,Join,Group By,Sum,我有两个表,adverts和advertsitems。这些表具有一对多(advertsitems)关系。我正在动态构建这个查询,因此我使用WHERE 1=1来更容易地添加新条件 我有以下疑问 SELECT a.title AS adtitle, a.id AS adid, a.price, a.image AS image, a.description, SUM(ai.quantity) as
adverts
和advertsitems
。这些表具有一对多(advertsitems
)关系。我正在动态构建这个查询,因此我使用WHERE 1=1
来更容易地添加新条件
我有以下疑问
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
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
在这种情况下,
SUM(ai.quantity)
的结果是2。如果我删除WHERE
条件ai.country LIKE
,结果是6。我想在两个单独的列中检索这两个值。因此,基本上我需要一个和
,它忽略WHERE
,而不是GROUP BY
,使用条件聚合:
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 AFquantity
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
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 AFquantity
a.shipping, a.customs, a.createdate
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
如果确实要按国家筛选,请使用having
子句。它将在聚合后进行过滤:
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 AFquantity
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
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 AFquantity
a.shipping, a.customs, a.createdate
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
嘿,再次感谢你(快速)的回复。如果我运行你的查询,我会得到广告上的所有结果,但我只想要与“ai.country-LIKE”匹配的广告。如果我在查询中添加'ai.country LIKE',我会得到相同的结果,colums totalquantity和afquantity都是2。谢谢!你真是个天才:D我只需要在SELECT-else中添加ai.country,我就可以得到“having子句中的未知列”。