SQLite:检索具有相似值的行

时间:2018-09-04 17:30:56

标签: sql sqlite

给出下表:

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

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

因此该语句应返回:

1,3,20

2,3,26.6

有人可以给我提示我需要哪个命令(使用SQLite)吗?

预先感谢

2 个答案:

答案 0 :(得分: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对重复(以相反的顺序),请将<>更改为<>

答案 1 :(得分:0)

您可以使用以下SQL:

select id as "ID", count(id) as "Count", avg(value) as "Avg Value"
  from tab
 group by id
 order by id