【问题标题】:SQL 'while' condition [duplicate]SQL'while'条件[重复]
【发布时间】:2025-11-28 21:00:06
【问题描述】:

我有一张桌子

CREATE TABLE dollars (
  price decimal,
  amount decimal
);

每条记录都有价格(1,23 美元)和金额(0.2)。如何在数量不等于 5 或​​更多之前选择记录。

例如:

  1. 价格:4,金额:2.5
  2. 价格:2,金额:1.5
  3. 价格:5,数量:3

总计 3 项,总金额为 7。

【问题讨论】:

  • 我觉得你需要哪里条件。 while 是一个循环,一直运行直到满足条件。在这里你不能指定这样的条件。
  • 您的意思是遍历每条记录并存储金额总和吗?改用定义明确的where 子句
  • 查询是否应该从表中选择随机记录?无论如何,解决方案是使用窗口函数。

标签: sql ruby-on-rails ruby postgresql


【解决方案1】:

“价格”列上是否有唯一键?

试试这样的:

SELECT
    dol.id, 
    dol.price,
    dol.amount, 
    (SELECT sum(amount) FROM public.dollars dol2 WHERE dol2.price <= dol.price) AS sum_amount
FROM
    public.dollars dol
WHERE
   (SELECT floor(sum(amount)) FROM public.dollars dol2 WHERE dol2.price <= dol.price) <= 5
ORDER BY price ASC;

当然,如果您想选择记录,例如,您可以更改“排序依据”条件。较低的 ID,而不是价格。

【讨论】:

    【解决方案2】:

    我认为需要 WHERE 条件而不是一段时间 像

       SELECT * FROM dollars 
       WHERE amount < 5
    

    【讨论】: