Это мой пример набора данных ...
CREATE TABLE blockhashtable (
id SERIAL PRIMARY KEY
,pos int
,filehash varchar(35)
,blockhash varchar(130)
);
insert into blockhashtable
(pos,filehash,blockhash) values
(1, "randommd51", "randstr1"),
(2, "randommd51", "randstr2"),
(3, "randommd51", "randstr3"),
(1, "randommd52", "randstr2"),
(2, "randommd52", "randstr2"),
(3, "randommd52", "randstr1"),
(4, "randommd52", "randstr7"),
(1, "randommd53", "randstr2"),
(2, "randommd53", "randstr1"),
(3, "randommd53", "randstr2"),
(4, "randommd53", "randstr3"),
(1, "randommd54", "randstr4"),
(2, "randommd54", "randstr55");
... и скрипка того же самого http://sqlfiddle.com/#! 9 / e5b201 / 14
Это мой текущий SQL запрос и вывод:
select pos,filehash,avg( (blockhash in ('randstr1', 'randstr2', 'randstr3') )) as matching_ratio from blockhashtable group by filehash;
pos filehash matching_ratio
1 randommd51 1
1 randommd52 0.75
1 randommd53 1
1 randommd54 0
Мой ожидаемый вывод выглядит примерно так:
pos filehash matching_ratio
1,2 randommd51 1
1,3 randommd52 0.5
1,2,4 randommd53 0.75
0 randommd54 0
pos
в последнем row
может быть 1
Кроме того, я могу удалить его, используя пользовательское условие в python позже.
По сути, в моем списке python, randstr2
повторяется только один раз, поэтому я хочу, чтобы в запросе SQL было найдено только одно максимальное совпадение. Вот почему matching_ratio
отличается в моем ожидаемом выводе.