【问题标题】:How to get position of rows where a condition meet in MySQL如何获取MySQL中满足条件的行的位置
【发布时间】:2020-04-16 15:08:42
【问题描述】:

这是我的样本数据集...

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

最后一个row 中的pos 也可以是1,我可以稍后在python 中使用自定义条件将其删除。

基本上,在我的 python 列表中,randstr2 只重复一次,所以我只希望在 SQL 查询中找到最多一个匹配项。这就是为什么 matching_ratio 在我的预期输出中有所不同。

【问题讨论】:

  • 我提供了示例表、我当前的查询以及如果你混合这两个东西。我想我们可以运行我的查询。但请原谅我,如果我不明白。我需要在文件中提供我的 SQL 表吗?
  • 我认为链接的答案是不言自明的,但如果不是这样,请告诉我们
  • 给我一些时间。我将创建 SQL 小提琴
  • 嘿,我完全编辑了我的问题。你说的对。现在任何人都可以简单地回答。非常感谢
  • @Strawberry 如果你有空,你现在可以帮我吗?非常感谢

标签: python mysql sql


【解决方案1】:

我看不出你的结果集与你的数据集是如何对应的,但你似乎在追求这样的东西......

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 |
+------------+---------+--------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多