如何在不使用GROUP BY子句的情况下对行进行分组

时间:2019-08-27 20:35:13

标签: postgresql tsql grouping window-functions

假设我有一个简单的表格:

   Date          Price
-----------------------
2012-01-05        23
2015-04-08        145
2016-03-09        12
2015-09-09        87
2000-01-15        23
2016-01-15        89
2016-07-12        23
2012-04-08        65

我想按年份对这些行进行分组,但不使用GROUP BY子句。如果我可以添加另一个包含年份或表示组的字符的列,那将是很好的,就像这样:

Date          Price     Group
-------------------------------
2012-01-05        23      1
2015-04-08        145     2
2016-03-09        12      3
2015-09-09        87      2
2000-01-15        23      4
2016-01-15        89      3
2016-07-12        23      3
2012-04-08        65      1

我尝试使用over()子句,但老实说,我不知道over()使用哪个函数。

2 个答案:

答案 0 :(得分:1)

如果只想添加另一列,请尝试执行案例

SELECT DATE, 
       PRICE,
  CASE DATE_PART('YEAR', DATE) WHEN 2015 THEN 1 
                               WHEN 2016 THEN 2 ... END


FROM MYTABLE 

但是,如果您想获取某项的汇总,则可以执行OVER()或GROUP BY

答案 1 :(得分:1)

从日期中提取年份和density_rank的组合将达到目的

select pr.category_id FROM products p
LEFT JOIN products_category_rel pr ON p.id = pr.product_id
left JOIN products_design pd ON p.id = pd.product_id 
LEFT JOIN products_producer pp ON pp.id = p.producer_id
group by pr.category_id, p.id