SQLite: получение строк с похожими значениями - PullRequest
0 голосов
/ 04 сентября 2018

с учетом следующей таблицы:

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

Таким образом, оператор должен вернуть:

1,3,20

2,3,26.6

Кто-нибудь может дать мне подсказку о том, какая команда мне нужна (с использованием SQLite)?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Вам необходимо самостоятельно присоединиться к значению, а не к равным идентификаторам. Затем сгруппируйте по паре идентификаторов. Используйте 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, если это также совпадение, когда три значения являются общими, но по крайней мере два из них являются одинаковыми. И если вы не хотите, чтобы пары идентификаторов повторялись (в обратном порядке), измените <> на < или >.

0 голосов
/ 04 сентября 2018

Вы можете использовать следующий SQL:

select id as "ID", count(id) as "Count", avg(value) as "Avg Value"
  from tab
 group by id
 order by id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...