最近几天,我一直在寻找一种方法来进行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
答案 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
列表匹配的所有行。