当前位置: 首页 > 知识库问答 >
问题:

在SQL中使用循环或递归还是使用Python?

蓝华皓
2023-03-14

假设我有下表:

这里A-B-C-D是购物车。我想买推车里的东西。项目的价格在每一行中。例如,购物车A有6个价格(10,9,8,7,6,5)的商品。

我只想在一个给定的推车中购买一个项目,如果在另一个推车中没有更便宜的项目,否则我想从另一个推车中购买该项目。当我购买每件物品时,我会将其标记为已购买。而且每个购物车都有不同的购买能力。对于A,我可以购买的最大值是5,对于B是6,对于C是4,对于D是1。

A车是锚,所以如果A车达到容量,我们就停下来。

所以事情会是这样的。

购买:

  1. 来自A的5个
  2. 6来自A
  3. 本次购买后来自D-D的6达到容量
  4. 7来自A
  5. 8来自A
  6. 来自B的8
  7. 来自B的8
  8. 9从A-A到达容量

既然A达到了它的容量,它就到此为止了。

如何在SQL中执行此操作。我想我可以使用一个循环,但我读过SQL是为了提高效率而基于设置的。我试图做的似乎需要一个循环或递归。这是正确的方法吗?我应该使用Python来完成这件事吗?

谢谢你的帮助!

共有1个答案

徐知
2023-03-14

如果我没有理解错的话,您可以通过取消转轴、枚举行和筛选来非常容易地完成此操作:

select t.*
from (select cart, val,
             row_number() over partition by cart order by val) as seqnum
      from ((select 'A' as cart, A as val from t) union all
            (select 'B' as cart, B from t) union all
            (select 'C' as cart, C from t) union all
            (select 'D' as cart, D from t)
           ) t
     ) t
where (cart = 'A' and seqnum <= 5) or
      (cart = 'A' and seqnum <= 6) or
      (cart = 'A' and seqnum <= 4) or
      (cart = 'A' and seqnum <= 1)
order by val;

注意:根据您正在使用的数据库,可能有更简单的方法来取消透视。

 类似资料:
  • 问题内容: 我有一个方法必须执行以下操作: 我想指定嵌套的数量(在上述情况下,我希望嵌套15个)。这里有一种使用递归编程的方法吗? 问题答案: 是。这可以通过递归编程来执行。 我假设您不喜欢在源代码中写下这些嵌套的代码-如您的示例所示,因为这确实是丑陋的编程-如评论员所解释。 下面的代码(类似于Java的伪代码)对此进行了说明。我假设嵌套的深度固定。然后,您实际上想循环遍历尺寸深度的整数向量。 数

  • 问题内容: 在查找循环方面已经存在一些问题,但是我没有找到SQL的解决方案(首选MSSQL)。 这些表将是Node(NodeID INT)和Edge(EdgeID INT,NodeID1 INT,NodeID2 INT) 在有向图中找到周期的性能很好的解决方案是什么? 问题答案: 该解决方案非常简单明了,但时间更长: 首先,将生成通过该图的所有路径的列表,以使任何路径都不会包含同一条边。 从此信息

  • 问题内容: 对于我开发的某些应用程序(后来逐渐忘记了),我一直在编写纯SQL,主要是针对MySQL。尽管我在SQLAlchemy之类的python中使用过ORM,但是我并没有坚持很长时间。通常,这是文档或复杂性(从我的角度来看)使我退缩。 我这样看:如果要使用一种类型的数据库,则使用ORM进行可移植性,使用普通SQL。我真的在寻求有关在开发需要数据库支持的应用程序时何时使用ORM或SQL的建议。

  • 问题内容: 我有下表所示的表 我们有包含“领导者ID”的表 问题陈述: 此问题是通过使用Employee及其Manager数据来确定Manager的负责人。 关于:我们有一个员工ID和他们的经理ID。请注意,经理ID来自员工ID。由于每位经理都有一个高于其级别的经理。 首先,我们将在Manager ID列中获取所有UNIQUE ID。然后,对于Manager ID列中的每个ID,我们将查找其各自的

  • 问题内容: 我不是SQL专家,但是如果有人可以帮助我。 我使用递归CTE来获取如下值。 Child1 –> Parent 1 Parent1 –> Parent 2 Parent2 –> NULL 如果数据填充出错,那么我将遇到以下类似情况,因此CTE可能会进入无限递归循环并给出最大递归错误。由于数据量很大,因此我无法手动检查此 错误数据 。请让我知道是否有办法找到它。 Child1 –> Par

  • 本文向大家介绍详解python使用递归、尾递归、循环三种方式实现斐波那契数列,包括了详解python使用递归、尾递归、循环三种方式实现斐波那契数列的使用技巧和注意事项,需要的朋友参考一下 在最开始的时候所有的斐波那契代码都是使用递归的方式来写的,递归有很多的缺点,执行效率低下,浪费资源,还有可能会造成栈溢出,而递归的程序的优点也是很明显的,就是结构层次很清晰,易于理解 可以使用循环的方式来取代递归