如何做 SQL 查询结果条数显示附加计算条件?

现有表 t_table,
字段如下:
varchar(x) name
double price
double amount

查询需求:
1. 名字为 'X'
2. 价格大于 Y
3. 总需 amount 为 Z, 也就是说我要查询出来的 数据的 amount 之和大于 Z, 并且不要把数据库里面的全部数据都查出来。

前面两个查询需求很简单,但是第三条不知道怎么写。
请问这三个需求结合在一起的SQL 怎么写?或者说不能写 ?
数据库可选项: MySQL, PostgreSQL

我们假定名字等于X,价格大于10。

那么是不是所有名称等于X价格大于10的amount总和大于Z就可以
假设你的总需是所有大于10的amount的和大于Z,那么显示什么,是显示所有的名称等于X,价格大于10的内容吗?那么如果所有amount之和不大于Z呢?是不是就不显示?价格小于10的计算amount吗?应该不计算吧
如果我上面没有说错,那么下面语句差不多能完成,语句未必能执行(没环境没办法测试,只能是起到一个借鉴的作用),我用的子查询,你可以尝试用表连接解决,那样可能更直观一些。
select name,price,amount from table where table.name in (select name from table where price>Y group by name having sum(smount)>Z) and table.price>Y追问

你好,你的回答不是我需要的。以下是我的伪代码,我想将以下的塞选代码用一条SQL完成。

追答

我还是没弄清楚你的amount的和到底是什么和
products哪来的,你的sql变量经过一个products_from_sql的处理得到一堆products的变量,但是我并不知道你的products_from_sql是什么,应该不是函数吧,个人感觉似乎是一个过程,也就是说经过最初得到的原始数据 price>Y and name='X'的值还要经过一些处理,关联或者筛选,然后求出所有的products的相关的amount的和。
这应该不是仅仅这一张表能搞定的吧,如果所有的查出来的amount全部求和那么还可以搞定,但是你还要和另外一张或几张表关联,我们怎么猜也猜不到其他的表结构,关联关系什么的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-28
关系型数据库是以一行来表示一条数据的,而不是一列。你要得出的那个表格,一行没有任何意义。
代码仅作参考:
declare @count0 int;
declare @count1 int;
declare @count2 int;
declare @count3 int;
if(object_id('TableA') is not null) drop table TableA
select getdate() as createTime, 产品名称 into TableA from [表名] where 销售金额 >=200 and 销售金额 <= 599;
if(object_id('TableB') is not null) drop table TableB
select getdate() as createTime, 产品名称 into TableB from [表名] where 销售金额 >=600 and 销售金额 <= 899;
if(object_id('TableC') is not null) drop table TableC
select getdate() as createTime, 产品名称 into TableC from [表名] where 销售金额 >=900 ;
select @count1 = count(1) from TableA;
select @count2= count(1) from TableB;
select @count3= count(1) from TableC;
set @count0 = @count1;
if @count0<@count2
begin
set @count0 = @count2;
end
if @count0<@count3
begin
set @count0 = @count3;
end
declare @i int;
set @i = 0;
while(@count1+@i)<@count0
begin
insert into TableA values(getdate(),'');
set @i = @i+1;
end
SET @i=0;
while(@count2+@i)<@count0
begin
insert into TableB values(getdate(),'');
set @i = @i+1;
end
SET @i=0;
while(@count3+@i)<@count0
begin
insert into TableC values(getdate(),'');
set @i = @i+1;
end
select a.产品名称 as '200到599',b.产品名称 as '600到899',c.产品名称 as '900以上'
from (select row_number() over(order by createTime) as rownum, 产品名称 from TableA) a
left join
(select row_number() over(order by createTime) as rownum, 产品名称 from TableB) b on a.rownum = b.rownum
left join
(select row_number() over(order by createTime) as rownum, 产品名称 from TableC) c on c.rownum = b.rownum
查看全部3个回答
纹身怎么洗 「点击咨询」
纹身怎么洗?百嘉丽采用专业洗纹身设备...
免费咨询:纹身一般价格多少
沈阳和平百嘉丽医疗..广告
洗纹身效果?百嘉丽洗纹身 洗眉 洗眼线
洗纹身效果?百嘉丽整形,大Q清洗纹身纹绣医师,5大优势洗...
沈阳和平百嘉丽医疗..广告
相关问题全部
第2个回答  2019-08-28
select * from tbl where a='xxx' and b='xxx' 不知道是不是你想要的
如果是同类型字段 也可以
where a+b='xxx'