2

因此,这比标题所暗示的要多一点。我有一个包含名称列和数量列的表,我想显示总和数量在 500 到 1500 之间的结果。

例子:

name     qty
------  ----
brad     100
cody     300
kylie   1100
brad     800
nelson  1200
bob      600
nelson   100
kylie    600

我希望显示结果

name     qty
------  ----
brad     900
nelson  1300
bob      600

希望这是有道理的。这是我的查询

SELECT name, SUM(qty) AS Total 
FROM t1 
    NATURAL JOIN t2 
WHERE qty BETWEEN 500 AND 1500 
GROUP BY name 
ORDER BY name

问题是它似乎只对qty 中介于 500 和 1500 之间的字段求和,而不是仅显示该范围内的Total字段。我尝试执行“WHERE SUM(qty) BETWEEN ....”,但这会导致编译错误(我使用的是 SQLite Studio)

这是我参加的数据库课程的家庭作业问题,我希望学习,而不仅仅是获得答案。谢谢!

4

2 回答 2

5

不需要加入,你需要添加一个 HAVING 子句

SELECT name, SUM(qty) AS Total 
FROM t1 
GROUP BY name 
HAVING SUM(qty) BETWEEN 500 AND 1500
ORDER BY name
于 2015-11-03T03:25:49.693 回答
0

您需要使用 HAVING 子句,该子句在 SUM 等聚合函数之后进行评估:

SELECT name
    ,SUM(qty) AS Total 
FROM t1 
NATURAL JOIN t2 
GROUP BY name 
HAVING SUM(qty) BETWEEN 500 AND 1500
ORDER BY name

我还建议不要使用 NATURAL JOIN。这通常被认为是不好的做法,因为它引入了一个错误点,没有好的回报。

于 2015-11-03T03:28:31.053 回答