【开源中国 APP 全新上线】“动弹” 回归、集成大模型对话、畅读技术报告”
我有一个表 表如下:
create table MM_DATAVALUE
(
DataCode VARCHAR(25) not null,
Col INTEGER not null,
Row INTEGER not null,
DataVal VARCHAR(60),
constraint P_Key_1 primary key ( DataCode , Col , Row )
)
in TBS1
index in TBS_IDX;
datacode row col dataval
---------------------------------------------------------------------
aaaaaaaa 1 1 1
aaaaaaaa 1 2 2
aaaaaaaa 1 3 2
aaaaaaaa 2 1 4
aaaaaaaa 2 2 4
aaaaaaaa 2 3 2
aaaaaaaa 3 1 5
aaaaaaaa 2 2 5
aaaaaaaa 3 3 5
我想根据datacode 得到 datacode下 每一列的 出现次数最多的数字 并求出这个数字在这一列中的占比.
我想到了一种sql是通过求出第一列出现次数最多的一列和占比 然后union上第二列的和union上第三列的
SELECT 1 index, dataval,NUM,round(ratio,2) FROM ( Select dataval,Count(1) AS num,(Count(1)+0.0)/(Select Count(1) from MM_DATAVALUE WHERE datacode='aaaaa' AND col=1)*100 As ratio from MM_DATAVALUE WHERE DATACODE='aaaaa' AND col=1 GROUP BY COL,dataval ORDER BY num DESC FETCH FIRST ROW ONLY ) UNION all 第二列 union all第三列
问:
有没有更简便的sql 因为 这个表的列是动态的 有可能会有200列 如果union all 200列 效率可能不高
引用来自“魔力猫”的答案
如果是我做,我会表另表一张表来存储你想要的结果。
我不想搞一个异常得复杂的SQL,还不容易看懂。
引用来自“非良”的答案
如果是我做,我会表另表一张表来存储你想要的结果。
我不想搞一个异常得复杂的SQL,还不容易看懂。
这个表会有千万条数据,都是以行,列,值,id的形式存储的,
所以如果我有一个id 有5000行 100列 这个id的数据量在这个表中就是5000*100的数据量
如果用程序 效率肯定很低 我也不想用sql union出每一列的占比(sql在上面),有没有更简单的写法?
引用来自“SueYY”的答案
这个表会有千万条数据,都是以行,列,值,id的形式存储的,
所以如果我有一个id 有5000行 100列 这个id的数据量在这个表中就是5000*100的数据量
如果用程序 效率肯定很低 我也不想用sql union出每一列的占比(sql在上面),有没有更简单的写法?
这个表的数据是通过导入 生成的 ,比如 我在excel里有 1000行 50列的数据 导入表中就是1000*50的数据量
我再导一个500行200列的数据 那么就是datacode下的数据量就是 500*200的数据量