[英]How to get position of rows where a condition meet in MySQL
This is my sample data set...这是我的样本数据集...
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");
...and fiddle of same http://sqlfiddle.com/#!9/e5b201/14 ...和相同的http://sqlfiddle.com/#!9/e5b201/14的小提琴
This is my current SQL query and output:这是我当前的 SQL 查询和 output:
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
My expected output is something like this this:我预期的 output 是这样的:
pos filehash matching_ratio
1,2 randommd51 1
1,3 randommd52 0.5
1,2,4 randommd53 0.75
0 randommd54 0
The pos
in last row
can be 1
also, I can remove it using a custom condition in python later.最后
row
的pos
也可以是1
,我可以稍后使用 python 中的自定义条件将其删除。
Basically, in my python list, randstr2
only repeat one time, so I want only maximum one match found in the SQL query.基本上,在我的 python 列表中,
randstr2
只重复一次,所以我只希望在 SQL 查询中找到最多一个匹配项。 That's why matching_ratio
is different in my expected output.这就是为什么
matching_ratio
在我预期的output中不同的原因。
I don't see how your result set corresponds to your data set, but you seem to be after something like this...我看不出你的结果集与你的数据集是如何对应的,但你似乎在追求这样的东西......
SELECT filehash
, GROUP_CONCAT(pos ORDER BY pos) pos
, 1-(COUNT(DISTINCT blockhash IN('randstr1','randstr2','randstr3'))/(COUNT(*))) ratio
FROM blockhashtable
GROUP
BY filehash;
+------------+---------+--------+
| filehash | pos | ratio |
+------------+---------+--------+
| randommd51 | 1,2,3 | 0.6667 |
| randommd52 | 1,2,3,4 | 0.5000 |
| randommd53 | 1,2,3,4 | 0.7500 |
| randommd54 | 1,2 | 0.5000 |
+------------+---------+--------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.