Использование отличных от других полей выбранных идентификаторов postgresql - PullRequest
0 голосов
/ 25 июня 2018

У меня есть эти данные

Table
id  weight
1   1000
1   1000
2   2000
2   2000
3   3000
4   3000

Я пытаюсь найти средний вес различных идентификаторов, кроме 4, и мне нужны данные в этом формате

 id          avg(weight) 
 1,2,3          2000

Я пробовал разные, но это дает мне среднее, включая все повторяющиеся значения.

SELECT
    String_agg(distinct id :: text, ', ') AS ids,
    Round(Coalesce(Avg(weight), 0)) AS avg
FROM "table"
where id != 4

Я также пробовал группировать по идентификатору, но он дает мне данные в другом формате, а также не дает мне правильное среднее значение.

SELECT
    String_agg(id :: text, ', ') AS ids,
    Round(Coalesce(Avg(weight), 0)) AS avg
FROM "table"
where id != 4
group by id

так, как я могу найти среднее для этого?

Спасибо.

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете попробовать использовать вашу текущую логику в подзапросе, который находит отличные записи:

SELECT
    STRING_AGG(id::text, ',' ORDER BY id) AS ids,
    ROUND(COALESCE(AVG(weight), 0)) AS avg
FROM
(
    SELECT DISTINCT id, weight
    FROM "table"
    WHERE id <> 4
) t;

Демо

Примечание. Я добавил предложение ORDER BY к вашему вызову STRING_AGG, чтобы идентификаторы отображались в нужном вам порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...