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子句中的未知列”。