给出下表:
+------------+----------+
| 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)?
提前致谢
您需要自我加入值而不是相等的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(以相反的顺序),请将<>
更改为<
或>
。
您可以使用以下SQL:
select id as "ID", count(id) as "Count", avg(value) as "Avg Value"
from tab
group by id
order by id