用postgresql特性简化group by 后取每组前n条记录的方法

需求:

求一段时间内各生产线前3名坏机的原因及坏机数.


step 1, 从将原始数据中抽取品质数据放于t96临时表

create temp table t96 
on commit drop 
as 
select * from t96_pd_log where recseq between '791G0' and '792G0' and f96_op='PD-QC'  ;
可以看下这个t96中对坏机原因的统计情况:

select f96_line,f96_result, sum(f96_qty) as qty from t96 group by f96_line,f96_result order by f96_line,f96_result,qty desc



step2, 一条sql就能得到需求的结果, 其中用了with这个短句,类似于临时表或子查询的意思了,但如果用了with定义一个子集,在接着Select里面可以多处引用.  下面SQL这个A子查询每条生产线用不良数倒序排,并每记录给一个行号 ...

with udc_qty_byline as 
(select f96_line,f96_result, sum(f96_qty) as qty from t96 group by f96_line,f96_result )
SELECT f96_line,f96_result,qty FROM 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY 
             f96_line order by qty DESC) AS Row_ID FROM udc_qty_byline
) AS A
WHERE Row_ID <=3 ORDER BY f96_line


  Postgresql is powerful.微笑


### 回答1: PostgreSQL中的GROUP BY用于将结果集按照指定的列进行分组,并对每个组进行聚合操作,例如计算总和、平均值、最大值、最小值等。GROUP BY语句通常与SELECT语句一起使用,用于生成汇总报表或统计数据。在GROUP BY语句中,可以使用聚合函数对每个组进行计算,也可以使用HAVING子句对分组后的结果进行筛选。GROUP BY语句的语法如下: SELECT column1, column2, ..., aggregate_function(column) FROM table_name WHERE condition GROUP BY column1, column2, ...; 其中,column1, column2, ...是要分组的列,aggregate_function是聚合函数,table_name是要查询的表名,condition是查询件。GROUP BY语句将结果按照指定的列进行分组,并对每个组进行聚合操作,最后返回每个组的聚合结果。 ### 回答2: 在PostgreSQL中,GROUP BY语句用于按照一个或多个列对查询结果进行分组。在具体应用中,使用GROUP BY时通常会指定一个或多个聚合函数以在每个分组内做进一步计算,比如计算每个分组的数量、平均值、最大值、最小值等。 GROUP BY语法如下: ``` SELECT column1, column2, ..., aggregat_function(column_name) FROM table_name WHERE condition GROUP BY column1, column2, ...; ``` 参数解释: - column1, column2, ...:要从表中选择的列的名称。 - aggregat_function(column_name):聚合函数的名称,采用函数名(column_name)的形式,其中column_name是要执行相应聚合函数的列的名称。 - table_name:要查询的表的名称。 - condition:可选,指定筛选件。 GROUP BY的工作原理是将查询结果按照分组列的值进行分组,并将每个分组内的数据进行聚合计算。例如,下面的查询语句使用GROUP BY对orders表中的数据按照customer_id进行分组,并计算每个客户的订单数量和订单总金额。 ``` SELECT customer_id, COUNT(order_id), SUM(order_amount) FROM orders GROUP BY customer_id; ``` 这个查询语句将orders表中的数据按照每个客户进行分组,并分别统计了每个客户的订单数量和订单总金额。如果没有GROUP BY子句,那么查询结果将是整张表的统计数据,而GROUP BY则将结果分组,使得我们可以对每个分组内的数据做聚合计算,得到更加详细的统计信息。 另外,GROUP BY还可以指定多个分组列,例如按照地区和年份对销售额进行分组: ``` SELECT region, YEAR(sale_date), SUM(sale_amount) FROM sales GROUP BY region, YEAR(sale_date); ``` 这个查询语句将sales表中的数据按照地区和年份进行分组,并计算每个分组的销售总额。 在使用GROUP BY时,还需要特别注意以下几点: 1. SELECT子句中的列必须要么出现在GROUP BY子句中,要么被聚合函数所使用。 2. 可以通过使用HAVING子句来筛选分组结果,HAVING的使用方法和WHERE类似,但它用于筛选分组后的结果,而不是原始表中的数据。 3. GROUP BY的效率较低,因为它需要对数据进行排序和分组计算,因此在使用GROUP BY时应该尽量减少分组列的数量和提高查询效率。 ### 回答3: PostgreSQL是一个流行的关系型数据库管理系统,它支持广泛的标准SQL语言特性,其中包括GROUP BY子句。在查询的结果中使用GROUP BY子句时,可以将结果按照指定字段的值进行分组并计算结果。下面是一些关于PostgreSQL GROUP BY使用的重要事项: 1. GROUP BY子句语法 GROUP BY子句用于将一个或多个列组合在一起并产生汇总结果。其一般形式如下: ``` SELECT column1, column2, ... FROM table_name WHERE conditions GROUP BY column1, column2, ... ``` 在GROUP BY子句中,需要使用要分组的列名。 2. GROUP BY子句用途 GROUP BY子句通常用于统计查询中,以便获得数据的聚合值。通过使用GROUP BY子句,可以将数据划分为几个细分组,并对每个组执行聚集计算。例如,可以使用GROUP BY计算每个销售员的销售金额总额。 3. GROUP BY子句的结果集 在使用GROUP BY子句后,查询将返回数据的汇总结果,而不是详细的行级数据。对于每个分组,都会计算并返回聚合值。这些聚合值可以是SUM、AVG、MAX、MIN或COUNT等。 4. GROUP BY子句和HAVING子句的区别 GROUP BY子句用于将数据分组并执行聚合计算,而HAVING子句用于过滤结果集中的分组。在HAVING子句中,可以使用聚合函数,以便筛选满足特定件的分组。如果使用WHERE子句,则会在分组之进行过滤,这可能会导致结果不准确。 5. 其他GROUP BY子句的使用 除了使用GROUP BY子句对结果进行分组外,还可以使用一些其他子句,如ORDER BY和DISTINCT来控制结果集的顺序和唯一性。例如,可以使用ORDER BY对每个分组的聚合值进行排序,以便找到最大或最小的值。 总之,PostgreSQLGROUP BY子句是非常有用的,它可以帮助为数据集生成有用的汇总统计。必须注意,在使用GROUP BY时,您需要正确处理聚合函数的数据类型,并选择正确的分组列,以便获得准确的结果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值