首页 > 解决方案 > SQLite:检索具有相似值的行

问题描述

给出下表:

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

提前致谢

标签: sqlsqlite

解决方案


您需要自行加入值而不是相等的 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 重复(以相反的顺序),请更改<><or >


推荐阅读