【发布时间】:2020-04-16 20:35:10
【问题描述】:
这是我的样本数据集...
CREATE TABLE blockhashtable (id int PRIMARY KEY AUTO_INCREMENT,pos int,filehash varchar(35), blockhash varchar(130) );
insert into blockhashtable
(pos,filehash,blockhash) values
(1, "random_md51", "randstr1"),
(2, "random_md51", "randstr2"),
(3, "random_md51", "randstr3"),
(1, "random_md52", "randstr2"),
(2, "random_md52", "randstr2"),
(3, "random_md52", "randstr2"),
(4, "random_md52", "randstr1"),
(5, "random_md52", "randstr7"),
(1, "random_md53", "randstr2"),
(2, "random_md53", "randstr1"),
(3, "random_md53", "randstr2"),
(4, "random_md53", "randstr1"),
(1, "random_md54", "randstr1"),
(2, "random_md54", "randstr55");
当前 SQL 查询(需要修复):
SELECT filehash
, GROUP_CONCAT(pos ORDER BY pos) pos
, (avg(blockhash IN('randstr1','randstr2','randstr3','randstr2','randstr2'))) as ratio
FROM blockhashtable
GROUP
BY filehash
电流输出(需固定)
filehash pos ratio
random_md51 1,2,3 1
random_md52 1,2,3,4,5 0.8
random_md53 1,2,3,4 1
random_md54 1,2 0.5
SQL 小提琴:http://sqlfiddle.com/#!9/6b5220/10
预期输出:
filehash pos ratio
random_md51 1,2,3 1
random_md52 1,2,3,4 0.8
random_md53 1,2,3 0.75
random_md54 1 0.5
我基本上是想在查询列表和 sql 表之间找到“相似的块哈希”。
关于比率列:
如果randomstr1 在 SQL 查询中只出现一次,那么我希望 SQL 数据库中的 randomstr1 最多匹配 1 个。
在第三个输出行。 ratio 是 0.75,因为 randomstr1 在查询中只出现一次,即使它在 MySQL 表中出现两次。所以在第三行,我们找到了 3/4 匹配。 randomstr2 在第三行中两次匹配,因为它在 SQL 查询中出现了 2 次或更多次。
关于pos。我只想知道matched blocks 的pos 值。
【问题讨论】:
-
据我所知 1 是正确的,在您的情况下,有 4 行带有 random_md53 和 ('randstr1','randstr2','randstr3') ('randstr1','randstr2')我不明白你想跳过哪一个。
-
对不起,我编辑了错误的问题....1分钟
-
你的MySql是什么版本的?
-
请检查我编辑的SQL查询@nbk有三个
randomstr2 -
我用的是MySQL-Wordbench 8.0,我想还是MySql 8.0...让我再确认一下
标签: mysql sql group-by mariadb