Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 根据标准化值选择前N列_Sql_Database_Oracle_Plsql - Fatal编程技术网

Sql 根据标准化值选择前N列

Sql 根据标准化值选择前N列,sql,database,oracle,plsql,Sql,Database,Oracle,Plsql,我有个愚蠢的问题。如果所有值都已标准化,是否可以根据每列中的值选择10列 比如说 cluster Id | v1 | v2| v3 | v4 | v6 | v26 ___________________________________________ 1 | 4.2|0.9|05 |3.2 | 0.7|0.5 2 | 1.2|0.1|0.9 |0.21|0.3 |0.1 所以在这个例子中,如果我想要集群1的前三列,我会 cluster ID |

我有个愚蠢的问题。如果所有值都已标准化,是否可以根据每列中的值选择10列

比如说

cluster Id | v1 | v2| v3 | v4 | v6 | v26 
___________________________________________
       1   | 4.2|0.9|05  |3.2 | 0.7|0.5
       2   | 1.2|0.1|0.9 |0.21|0.3 |0.1
所以在这个例子中,如果我想要集群1的前三列,我会

     cluster ID |v1 |v4 |v2
            1   |4.2|3.2|0.9
目前我正在使用Oracle Sql,但如果在不同的平台上有解决方案,并且使用Sql是不可能的,我愿意接受任何建议

编辑。我添加了一个图像,显示了我试图在Sql developer上复制的功能。fetch size是变量/属性的数量,当我更改fetch size时,模型后面必须有一些表,这就是我试图重现的语句
谢谢

如果您想要前三个值,我将取消数据剥离并重新聚合。Oracle 12c为此提供了一些有用的功能;对于早期版本,我只会使用更传统的SQL方法

不清楚您想要的是列名还是值。以下两方面都适用:

select id,
       max(case when seqnum = 1 then v end) as v_1,
       max(case when seqnum = 2 then v end) as v_2,
       max(case when seqnum = 3 then v end) as v_3,
       max(case when seqnum = 1 then which end) as which_1,
       max(case when seqnum = 2 then which end) as which_2,
       max(case when seqnum = 3 then which end) as which_3
from (select id, v, which, row_number() over (partition by id order by v desc) as seqnum
      from ((select id, v1 as v, 'v1' as which from t) union all
            (select id, v2 as v, 'v2' as which from t) union all
            (select id, v3 as v, 'v3' as which from t) union all
            (select id, v4 as v, 'v4' as which from t) union all
            (select id, v5 as v, 'v5' as which from t)
           ) t
      ) t
group by id;

最后,我采用的方法是遍历在数据集集群期间创建的所有Oracle Data Miner表。其中一个表DM$PTCLUS_K_M_1_2包含一个包含所有集群、值、变量Id和名称的透视表。使用我的示例在此处重新创建

cluster_id,variable_id,value,variable_name
   1      |  1        | 4.2 | v1
通过使用where子句cluster_id执行嵌套select语句并按值排序,我可以为每个集群挑选出前10个变量及其值

select * from 
 (select * from DM$PTCLUS_K_M_1_2
     where cluster_id = 1
     order by value)
  where rownum < 11

对于那些有类似问题并希望获得集群质心或值的人,我建议查看dataminer模式并检查那里的表,其中一些将包含您需要的数据

Top3?你是指前三列还是前三行?还有,你到底想解决什么问题?您可能认为这是错误的,比如使用参数/实体所有值都是标准化的?这是什么意思?然后:所需的输出格式是什么?四列中的结果集?您需要记住顶部的值来自列v1、v4、v2吗?您也有一个输入错误:值4.2来自v1,而不是v2。无论语言/平台如何,整个项目都非常模糊。Austin French-前三列,其想法是用最高的方法提取变量。我已经使用ODM和K means clustering创建了一个模型,我可以使用Sql上的model viewer查看我想要的数据,并更改设置以获得每个集群的前10个、20个等变量。但是,我无法将查询重新创建为“选择”状态,因为它是由所有菜单驱动的。@mathguy。标准化是一个统计术语,用平均值减去标准偏差。它从列中删除单位,并将所有列置于兼容范围内。它对于一系列统计技术非常有用。1是否总是有6个值列?2您是否总是选择相同数量的最高值?3您不能重命名列,所以您是否希望使用cluster\u id、1st\u col\u num、1st\u col\u val、2nd\u col\u num、2nd\u col\u val等,等等,最高值总是在第一对列中,col\u num告诉您col\u val来自哪个列,还是希望保留cluster\u id、v1、v2、v3、v4、v5,等等,只在不在最高值集中的列中输入NULL?我还建议OP保留子查询的结果,而不重新输入它们。只是一种EAV表,具有集群id、秩、列标识符和值。