我有两个查询,想合并成一个。
查询1(伪代码):
recipe_titles = select recipe_title
from recipe
where nutrient_id in (4,5)
group by recipe_title
order by sum(nutrient_amount) desc
那么,我想用每一个 recipe_title
要选择整个配方行:
查询2(伪代码):
select * from recipe where recipe_title = recipe_titles[n]. (n is 1, then 2, then 3...)
如果第一个查询返回100 recipe_title
,我将不得不运行第二个查询100次,这是没有效率的。
有没有办法在一个查询中进行这两个选择? IN
因为订单丢失,所以不适用于我的案例:
select * from recipe where recipe_title in recipe_titles. (Not work)
1条答案
按热度按时间hyrbngr71#
可以使用窗口函数。我推荐一个有条件的窗口
sum()
,然后可以用于筛选和排序:另一方面,如果你不需要过滤
recipe_title
任何一个都有nutrient_id
4
或者5
,则不需要子查询: