SQL 仅当总和大于 100 时才选择所有记录

标签 sql sum

我不太确定如何问这个问题,所以我举个例子

我有一个巨大的 table ,类似于这样的东西......

Name Widgets TransDate  Location
Abby  2      12/1/2010  Middleton
Abby  13     1/10/2011  Burmingham
Bobby 10     12/12/2011 Easton
Bobby 5      10/10/2011 Weston
.
.

我当前的sql语句是...

SELECT name, widgets, TransDate, Location 
FROM MyTable
WHERE TransDate BETWEEN 1/1/2011 and 12/31/2011

给我一​​张这样的 table ...

Name Widgets TransDate  Location
Abby  13     1/10/2011  Burmingham
Bobby 15     12/12/2011 Easton
Bobby 5      10/10/2011 Weston
.
.

如何修改上述 SQL,以同时删除不满足 Widget 配额 X 的人员的记录...假设 X = 16。在这种情况下,Abby 将被删除,因为她的 widget 总数为13 条,鲍比的记录将保留,因为他的总数是 20 条。

提前谢谢您!

最佳答案

如果我理解您的请求,您想要的结果与您已经获得的结果类似,但要过滤那些已达到配额的名称。如果这是正确的,您可以使用 IN() 子查询来查找与 >= 100 个小部件分组的名称。

SELET name, widgets, TransDate, Location FROM MyTable 
WHERE
  /* IN() subquery for names meeting the quota */
  name IN (
     SELECT name 
     FROM tbl 
     /* If they must have met the quota only during the time window, uncomment below */
     /* Otherwise, omit the WHERE clause to find those who have met the quota at any time */
     /* WHERE TransDate BETWEEN '1/1/2011' and '12/31/2011' */
     GROUP BY name 
     HAVING SUM(widgets) >= 100

  ) 
  AND TransDate BETWEEN '1/1/2011' and '12/31/2011'

关于SQL 仅当总和大于 100 时才选择所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8827245/

相关文章:

python - 如何对特定列中的数字求和?

mysql - mysql 上的多个 SUM 和 JOIN 通过一个查询

sql - 使用 sysobjects 表中的表名创建 Sql Server View

sql - 计数返回空白而不是0

mysql - 按连接表值选择

mysql - 如何修复where子句中的多个子查询

python - 如何在 Python 中查找奇数索引处的元素之和

Java Stream 结合两个不同变量的总和

mysql - 如何选择最大值并返回多个条目

php - 使用mysql和php的两级邻接表