filedType filedName filedValue
type1 name1 value1
type1 name1 value1
type1 name2 value1
type1 name2 value1
type1 name2 value1
type1 name3 value1
type2 name1 value1
type2 name1 value1
type2 name1 value1
type3 name2 value1
一、需求:
1、针对filedType分组
2、分组后count filedName,只显示count结果Top 2的。
二、例子:
例如数据如上啊,希望结果是:
filedType filedName filedValue
type1 name1 value1
type1 name1 value1
type1 name2 value1
type1 name2 value1
type1 name2 value1
type2 name1 value1
type2 name1 value1
type2 name1 value1
type3 name2 value1其中数据
type1 name3 value1 被过滤掉了。三、解释:
1、首先数据有三种类型
type1
type2
type32、然后type1的filedName有三种类型分别是
name1 2条记录。
name2 3条记录。
name3 1条记录。3、只保留按照filedName类型数量最多的前两个类型的数据即
name1 2条记录。
name2 3条记录。
所以去掉name3这条记录
4、type2、type3类型逻辑同上。
type1 name1 value1
type1 name1 value1
type1 name2 value1
type1 name2 value1
type1 name2 value1
type1 name3 value1
type2 name1 value1
type2 name1 value1
type2 name1 value1
type3 name2 value1
一、需求:
1、针对filedType分组
2、分组后count filedName,只显示count结果Top 2的。
二、例子:
例如数据如上啊,希望结果是:
filedType filedName filedValue
type1 name1 value1
type1 name1 value1
type1 name2 value1
type1 name2 value1
type1 name2 value1
type2 name1 value1
type2 name1 value1
type2 name1 value1
type3 name2 value1其中数据
type1 name3 value1 被过滤掉了。三、解释:
1、首先数据有三种类型
type1
type2
type32、然后type1的filedName有三种类型分别是
name1 2条记录。
name2 3条记录。
name3 1条记录。3、只保留按照filedName类型数量最多的前两个类型的数据即
name1 2条记录。
name2 3条记录。
所以去掉name3这条记录
4、type2、type3类型逻辑同上。
FROM
(SELECT filedtype,filedname,filedvalue,
dense_rank () over (PARTITION BY filedtype ORDER BY cnt DESC) dr
FROM
(SELECT filedtype,filedname,filedvalue,
COUNT(filedname) over (PARTITION BY filedtype,filedname) cnt
FROM test))
WHERE dr<=2;
FROM test
WHERE (filedType, filedName) IN
(SELECT filedType, filedName
FROM (SELECT filedType,
filedName,
row_number() over(PARTITION BY filedType, filedName ORDER BY cnt DESC) row_num
FROM (SELECT filedType, filedName, COUNT(*) cnt
FROM test
GROUP BY filedType, filedName))
WHERE row_num <= 2);
2 FROM test
3 WHERE (fieldType, fieldName) IN
4 (SELECT fieldType, fieldName
5 FROM (SELECT fieldType,
6 fieldName,
7 row_number() over(PARTITION BY fieldType, fieldName
ORDER BY cnt DESC) row_num
8 FROM (SELECT fieldType, fieldName, COUNT(*) cnt
9 FROM test
10 GROUP BY fieldType, fieldName))
11 WHERE row_num <= 2);FIELDTYPE FIELDNAME FIELDVALUE
-------------------- -------------------- --------------------
type1 name1 value1
type1 name1 value1
type1 name2 value1
type1 name2 value1
type1 name2 value1
type1 name3 value1
type2 name1 value1
type2 name1 value1
type2 name1 value1
type2 name2 value1已选择10行。--去掉fieldName
SQL> SELECT *
2 FROM test
3 WHERE (fieldType, fieldName) IN
4 (SELECT fieldType, fieldName
5 FROM (SELECT fieldType,
6 fieldName,
7 row_number() over(PARTITION BY fieldType ORDER BY cnt DESC) row_num
8 FROM (SELECT fieldType, fieldName, COUNT(*) cnt
9 FROM test
10 GROUP BY fieldType, fieldName))
11 WHERE row_num <= 2);FIELDTYPE FIELDNAME FIELDVALUE
-------------------- -------------------- --------------------
type1 name1 value1
type1 name1 value1
type1 name2 value1
type1 name2 value1
type1 name2 value1
type2 name1 value1
type2 name1 value1
type2 name1 value1
type2 name2 value1已选择9行。另外请问一下,你写这个SQL的时候是在什么环境下写的?PL/SQL DEV吗
每行都缩进、以及关键字都大小写都是你自己手工输入都还是系统会自动识别出关键字并置为大写?
FROM
(SELECT filedtype,filedname,filedvalue,
dense_rank () over (PARTITION BY filedtype ORDER BY cnt DESC) dr
FROM
(SELECT filedtype,filedname,filedvalue,
COUNT(filedname) over (PARTITION BY filedtype) cnt
FROM test))
WHERE dr <=2;
(SELECT A.*,DENSE_RANK() OVER(PARTITION BY FILEDTYPE ORDER BY FILEDNAME) AS R FROM TEST A)
WHERE R<=2
呵呵 也说不定是tangren有良好编码习惯 自己手工打的
】