如何进行查询以选择SUM等于固定值的位置

时间:2018-08-02 14:33:37

标签: sql db2

最近几天,我一直在寻找一种方法来进行SQL查询,该方法可以搜索数据库并返回记录,其中相同ID的SUM等于或大于提供的值。

为此,我一直在使用W3schools数据库在products table中对其进行测试。

更多,所以我一直在尝试:

SELECT * FROM products
WHERE supplierid=? and SUM(price) > 50

在“供应商编号”中将遍历相同的供应商,并且在这种情况下,其价格总和高于50时将返回记录。

在这种情况下,它将读取供应商ID 1,然后加上所有供应商18 + 19 + 10 = 47的价格现在为47 <50,因此它将不会在最后打印这些记录。下一个供应商ID 2 22 + 21.35 = 43.35,直到价格总和大于50时,它才会打印这些记录

我正在使用DB2数据库。 样本数据:

ProductID   ProductName SupplierID  CategoryID  Price
1           Chais       1           1           18
2           Chang       1           1           19
3           Aniseed     1           2           10
4           Chef Anton  2           2           22
5           Chef Anton  2           2           21.35
6           Grandma's   3           2           25
7           Uncle Bob   3           7           30
8           Northwoods  3           2           40
9           Mishi       4           6           97
10          Ikura       4           8           31
11          Queso       5           4           21
12          Queso       5           4           38
13          Konbu       6           8           6
14          Tofu        6           7           23.25

2 个答案:

答案 0 :(得分:2)

未经测试,但是我希望db2具有分析功能和CTE,所以也许:

with
basedata as (
select t.*
     , sum(t.price) over(partition by t.supplierid) sum_price
  from products t
)
select * 
  from basedata
 where supplierid = ?
   and sum_price > 50

分析函数汇总价格信息,但不对结果集进行分组,因此您可以从初始结果中获取行,但仅限于汇总价格值> 50的行。

与带有子查询的解决方案的区别在于,解析函数的使用应该更高效,因为它只需读取一次表即可产生结果。

答案 1 :(得分:2)

怎么样:

select * from products where supplierid in (
  select supplierid
    from products
    group by supplierid
    having sum(price) > 50
);

子查询找出所有与您的条件匹配的supplierid值。主要(外部)查询检索与supplierid列表匹配的所有行。