PostgreSQL:选择列并从组中排除

时间:2019-05-22 17:44:58

标签: postgresql

可能以不同的格式提出了这个问题,但我找不到答案。

我有桌子orders

date, quantity_ordered, unit_cost_cents , product_model_number, title

我想:

SELECT 
  model_number,
  title,
  SUM(unit_cost_cents  / 100.00 * quantity_ordered) as total
FROM orders
GROUP BY model_number
HAVING SUM(quantity_submitted) > 0
ORDER BY total DESC

但是它也需要按title进行分组。

我的问题是我的title会随着时间变化。我想保留标题,只显示/选择最新的title,而不按标题分组,这会使数字不同。

2 个答案:

答案 0 :(得分:1)

您可以使用子查询来获取最新标题:

SELECT 
  model_number,
  (select max(title) from orders where date = (
    select max(date) from orders where model_number = o.model_number)
  ) title,
  SUM(unit_cost_cents  / 100.00 * quantity_ordered) as total
FROM orders o
GROUP BY model_number 
HAVING SUM(quantity_submitted) > 0
ORDER BY total DESC

我使用select max(title)而不是select title来确保子查询不会返回超过1行(以防万一)。

答案 1 :(得分:1)

SELECT 
  o.model_number
  , om.title
  , SUM(o.unit_cost_cents  / 100.00 * o.quantity_ordered) as total
FROM orders o
JOIN (SELECT model_number, title
        ,row_number() OVER (PARTITION BY model_number ORDER BY zdate DESC) AS rn
        FROM orders) om
  ON om.model_number=o.model_number AND om.rn=1
GROUP BY 1,2
HAVING SUM(o.quantity_submitted) > 0
ORDER BY 3 DESC
        ;
相关问题