gpt4 book ai didi

sql - 在 Postgresql 中加入最大记录

转载 作者:行者123 更新时间:2023-11-29 14:29:06 25 4
gpt4 key购买 nike

我有两个表:

products
+----+--------+
| id | name |
+----+--------+
| 1 | Orange |
| 2 | Juice |
| 3 | Fance |
+----+--------+
reviews
+----+------------+-------+------------+
| id | created_at | price | product_id |
+----+------------+-------+------------+
| 1 | 12/12/20 | 2 | 1 |
| 2 | 12/14/20 | 4 | 1 |
| 3 | 12/15/20 | 5 | 2 |
+----+------------+-------+------------+

如何获取按最近(最大创建时间)评论的价格订购的产品列表?

+------------+--------+-----------+-------+
| product_id | name | review_id | price |
+------------+--------+-----------+-------+
| 2 | Juice | 3 | 5 |
| 1 | Orance | 2 | 4 |
| 3 | Fance | | |
+------------+--------+-----------+-------+

我使用最新的 PostgreSQL。

最佳答案

demo:db<>fiddle

使用 DISTINCT ON

SELECT
*
FROM (
SELECT DISTINCT ON (p.id)
p.id,
p.name,
r.id as review_id,
r.price
FROM
reviews r
RIGHT JOIN products p ON r.product_id = p.id
ORDER BY p.id, r.created_at DESC NULLS LAST
) s
ORDER BY price DESC NULLS LAST
  1. 加入两个表(products LEFT JOIN reviewreview RIGHT JOIN products)。
  2. 现在您必须执行您的命令。首先,您要将产品组合在一起。然后,您想要获取每个产品的最新条目(日期按降序排列以获得最新的作为第一行)。
  3. DISTINCT ON 始终过滤有序组的第一行。因此,您可以获得每个产品的最新条目。
  4. 要对产品行进行排序,请将 1-3 放入子查询中,然后按 price 进行排序。

关于sql - 在 Postgresql 中加入最大记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54368981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com