Данные подсчета Postgresql, основанные на данных группы другой таблицы, приводящей к JSON - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть две таблицы, которые выглядят так:

users
id     name     city           state
1      Bob      Los Angeles    California
2      Susan    Dallas         Texas
3      Joe      Los Angeles    California


activity       
type           user_id
Activation     1
Registration   1
Activation     2
Activation     3

Я хочу сосчитать, что произошло number of times the activity of type Activation, чтобы вернуть набор данных, подобный этому:

[
  {count: 2, city: 'Los Angeles', state: 'California'},
  {count: 1, city: 'Dallas', state: 'Texas'}
]

Вот запрос, который я пробовал:

SELECT COUNT(*) AS count, user_id,
(SELECT json_agg(users.*) FROM users WHERE activity.user_id = users.id) as users
FROM activity
WHERE type='Activation'
GROUP BY users.city, users.state, user_id

И я получаю эту ошибку: error: missing FROM-clause entry for table "users"

Я не уверен, как сделать подсчет, как эта группировка данных из нескольких таблиц.

Это последняя версия Postgresql

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы можете сделать это, чтобы получить желаемый результат:

SELECT json_agg(users.*) from (select 
 COUNT(id) count, min(city) city, min(state) state from users, activity
where users.id=activity.user_id group by id, city, state) as users;
0 голосов
/ 02 ноября 2018

Сначала я создал бы представление, предоставляющее правильные данные, например:

CREATE VIEW activations_on_locations AS
    SELECT count(*), U.city, U.state
    FROM users U
    INNER JOIN activity A
        ON U.id = A.user_id
        AND A.type='Activation'
    GROUP BY U.city, U.state;

Наоборот, запрос JSON довольно прост:

SELECT json_agg(AOL) FROM activations_on_locations AOL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...