给出下表:
+------------+----------+
| 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)吗?
预先感谢
答案 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