1. 程式人生 > >用postgresql特性簡化group by 後取每組前n條記錄的方法

用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.微笑

相關推薦

postgresql特性簡化group by n記錄方法

需求: 求一段時間內各生產線前3名壞機的原因及壞機數. step 1, 從將原始資料中抽取品質資料放於t96臨時表 create temp table t96 on commit drop as

Mysql和Oracl 分組N記錄

MySQL取每組的前N條記錄:使用自連線的方式一、對分組的記錄取前N條記錄:例子:取前 2條最大(小)的記錄1234567891011121314151617181.用子查詢:SELECT * FROM right2 a  WHERE 2>(SELECT COUNT(*

分組查詢n記錄例項

假設有這樣一張運動員比賽成績表 tb_score 現在要求查詢出每個國家的前三名的成績記錄,查詢語句可以這樣寫: 1、 select t3.id,t3.country,t3.score fro

mysql分組記錄(排名) 附group by與order by的研究

select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name--方法2:select a.* from tb a where not exists(select 1 from tb 

mysql分組記錄

1、表SQL: DROP TABLE IF EXISTS `ho_archives`; CREATE TABLE `ho_archives` (   `id` mediumint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',

sqlite 分組獲取的第一記錄

有表如下 CREATE TABLE test ( id INTEGER PRIMARY KEY ,groupid INTEGER DEFAULT 0 ,t INTEGER DEFAULT 0 ,x INTEGER DEFAULT 0 ,y INTEGER DEFAULT 0

mysql使用GROUP BY分組實現N記錄方法

cls class ges rom 當前 分組 實現 一個 images MySQL中GROUP BY分組取前N條記錄實現 mysql分組,取記錄 GROUP BY之後如何取每組的前兩位下面我來講述mysql中GROUP BY分組取前N條記錄實現方法。 這是測試表(也

mysql分組指定記錄數的方法

--按某一欄位分組 取最大(小)值所在行的資料 /* 資料如下: name val memo a    2   a2(a的第二個值) a    1   a1--a的第一個值 a    3   a3:a的第三個值 b    1   b1--b的第一個值 b    3   b3

從排序的結果集中刪除 n記錄

not null ima -- date com alt delet lec log 端午有人休息,有人忙 操作前數據: --從排序後的結果集中刪除 前n條記錄delete from emp where empno in (select empno

sql語句分組查詢排序取出n記錄

1.sql語句分組排序後取出前n條記錄 (SELECT * FROM ( SELECT "row_number" () OVER ( PARTITION BY mmsi ORDER BY orginal_in_draught DESC ) A

mysql學生成績排名,分組 N 記錄

score表: CREATE TABLE `score` ( `student_id` int(10) DEFAULT NULL, `class_id` int(10) DEFAULT NULL, `score` int(5) DEFAULT

MySQLN記錄

  MySQL 分組後取每組前N條資料 與oracle的 rownumber() over(partition by xxx  order by xxx )語句類似,即:對錶分組後排序 CREATE TABLE `mygoods` ( `goods

Mysql分組統計、排序、N記錄解決方案

今日根據專案需求,需要在mysql中解決記錄的分組統計、排序,並抽取前10條記錄的功能。現已解決,解決方案如下: 1)表結構 <span style="font-size:18px;">CREATE TABLE `policy_keywords_rel` (

Linq分組及排序,N記錄

Linq多欄位分組排序並取前N條記錄時,一定要先分組再排序,不然取到的記錄是不規則的 程式碼示例【按HotWord分組,並取sorNum倒序,取前15條記錄】 [Route("api/

MySQL之——GROUP BY分組欄位最大值

出處:http://blog.csdn.net/l1028386804/article/details/54657412 假設有一個業務場景,需要查詢使用者登入記錄資訊,其中表結構如下: [sql]  view plain  cop

SQL Server GROUP BY 拼接 字串

原文地址:https://blog.csdn.net/u010673842/article/details/79637618   select ID, STUFF((select ',' + name from class where ID = a.ID for xml path('

mysql 分組group by 根據具體條件進行sum

mysql的手冊中對SUM函式的介紹非常簡單和含糊, 今天在搜資料的時候發現SUM函式的引數還可以加入條件判斷.  比如有如下的一個表: 日期                    支出專案名稱                          支出類別           支出金額       

MySQL(1)------group by 分組 最大值

首先表結構 create table sysstudentlibrarypool ( id int auto_increment primary key, score int null, time var

group by的彙總結果,如何去和總和做百分比

有表如下: 表名:table1 欄位有兩個:name  amount 表的資料如下: --------------- aa 10 bb 20 aa 10 bb 20 cc 30 --------------- select name, sum(amount) from table1 group by nam

thinkphp下group by分組獲取最新資料

$lock = M('locked_record'); $type = 1; $subQuery = $lock->table('sys_locked_record') ->where(array('type'=>$type)) ->order('