【问题标题】:How to display a specific range of numbers in an SQL query如何在 SQL 查询中显示特定范围的数字
【发布时间】:2016-02-03 02:47:51
【问题描述】:

因此,这比标题所暗示的要多一点。我有一个包含 name 列和 qty 列的表,我想显示总和数量在 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)

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

【问题讨论】:

  • 感谢 Bacon Bits 的编辑,现在看起来干净多了!

标签: mysql sql database sqlite sqlitestudio


【解决方案1】:

您需要使用 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。这是generally considered bad practice,因为它引入了一个错误点,没有好的回报。

【讨论】:

  • t1 包含 name 列和 id 列,t2 包含 qty 列和 id 列。 id 是将数量链接到特定名称的共性。如果不进行 NATURAL JOIN,对我来说更好的方法是什么?
  • @dks209 显式指定JOIN条件:FROM t1 NATURAL JOIN t2变为FROM t1 INNER JOIN t2 ON t1.id = t2.id
【解决方案2】:

不需要join,需要添加HAVING子句

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多