我不确定是否可以只使用Django
ORM
或纯SQL
来完成。我有一个Fruit
模型,我想呈现一个水果列表,这样每个并且只有第n个水果是type="apple"
。你知道吗
因此,对于4来说:
我正在寻找一种比拥有一大堆水果更有效的方法,最好是一个QuerySet
,但不确定这是否可行。你知道吗
fruits_except_apples = Fruit.objects.exclude(type='apple')
apples = Fruit.objects.filter(type='apple')
我甚至可以创建两个QuerySets
,然后以某种方式合并它们或者只是重新排序一个QuerySet
。你知道吗
我不知道这是否有帮助,但这个查询命令的水果在你的方式。但我相信这可以在循环(SQL函数或python)中以更有效的方式完成。你知道吗
demo:db<>fiddle
逐步解释:
主要的问题是得到一个有两个不同行数的订单:一个有4步(4,8,12,…),一个有1步但没有4步(1,2,3,5,6,7,9,…),这才是真正的问题。你知道吗
我的桌子:
第一部分。获取非苹果的订单:
使用window function
row_number
。这将在数据中添加行计数列:现在我们必须创造差距。为此,有必要移动3的块:ids 4,5,6应该变成5,6,7;ids 7,8,9应该变成9,10,11,依此类推。你知道吗
3的块可以在下一个子选择中用
row_number
的整数除法实现:这给了
我们可以看到,简单的划分仍然是移位的。所以减去1我们得到了我们期望的结果:
这给了
现在我们可以看到,我们可以添加两个最右边的列来实现我们的结果:
这给了
为了得到
apple
id,我们只需再次使用row_number()
函数,它用(1,2,3,…)枚举apple
行。然后我们将这些ID与4相乘得到(4,8,12,…)。你知道吗这两个部分可以通过
UNION
连接,然后必须按照它们生成的id排序。你知道吗相关问题 更多 >
编程相关推荐