SQL:在一个联接上进行筛选,而在另一个联接上进行排序
我有一个SQL:在一个联接上进行筛选,而在另一个联接上进行排序,sql,postgresql,join,Sql,Postgresql,Join,我有一个产品模型,它有许多Skus,每个产品还可以有一个定制,其中包括特色产品。架构如下所示: Product | id | category_id | title | image | Sku | id | product_id | subtitle | price | Customization | id | product_id | title | featured | 我正在根据其类别id和Sku的价格对产品进行筛选/排序,如下所示: SELECT id, title, image,
产品
模型,它有许多Sku
s,每个产品还可以有一个定制
,其中包括特色产品。架构如下所示:
Product
| id | category_id | title | image |
Sku
| id | product_id | subtitle | price |
Customization
| id | product_id | title | featured |
我正在根据其类别id和Sku
的价格对产品进行筛选/排序,如下所示:
SELECT id, title, image, prices
FROM (
SELECT p.id, p.title, p.image, array_agg(s.price) as prices
FROM "Products" p
JOIN "Skus" s
ON p.id = s.product_id
WHERE p.category_id in (1,2,3,4) AND s.price > 99
GROUP BY p.id
) x
ORDER BY id DESC;
我想为产品
s添加一个附加过滤器,该产品的定制
s具有featured=true
是否可以包含另一个JOIN
来执行此操作,或者是否有更好的方法?首先,您不需要子查询。其次,您可以使用加入(或中的或存在):
谢谢,这非常有效,也改进了我原来的查询!
SELECT p.id, p.title, p.image, array_agg(s.price) as prices
FROM "Products" p JOIN
"Skus" s
ON p.id = s.product_id JOIN
Customization c
ON p.id = c.product_id AND c.featured = true
WHERE p.category_id in (1, 2, 3, 4) AND s.price > 99
GROUP BY p.id
ORDER BY p.id DESC