SQLite:检索具有相似值的行

问题描述 投票:0回答:2

给出下表:

+------------+----------+
|  id        |  value   |
+------------+----------+
| 1          | 10       |
| 1          | 20       |
| 1          | 30       |
| 2          | 10       |
| 2          | 30       |
| 2          | 40       |
| 3          | 10       |
| 3          | 20       |
| 3          | 30       |
| 3          | 40       |
+------------+---------+

我想找到所有共享至少3个相似值的id和这些值的平均值(id1,id2,avg(value))

因此该声明应该返回:

1,3,20

2,3,26.6

任何人都可以给我一个关于我需要哪个命令的提示(使用SQLite)?

提前致谢

sql sqlite
2个回答
1
投票

您需要自我加入值而不是相等的ID。然后按ID对分组。使用avg(value)获取count(DISTINCT value)子句中的平均值和HAVING,以检查最少三个共享值。

SELECT t1.id,
       t2.id,
       avg(value)
       FROM elbat t1
            INNER JOIN elbat t2
                       ON t2.id <> t1.id
                          AND t2.value = t1.value
       GROUP BY t1.id,
                t2.id
       HAVING count(DISTINCT value) >= 3;

或者删除DISTINCT,如果它也匹配,当共享三个值但至少其中两个相同时。如果您不希望重复ID(以相反的顺序),请将<>更改为<>


0
投票

您可以使用以下SQL:

select id as "ID", count(id) as "Count", avg(value) as "Avg Value"
  from tab
 group by id
 order by id
© www.soinside.com 2019 - 2024. All rights reserved.