Выполнить цикл foreach для столбца таблицы в PostgreSQL - PullRequest
0 голосов
/ 11 февраля 2019

Мне нужно перебрать столбец таблицы и для каждого значения выполнить простой оператор SELECT.

Я получаю таблицу результатов со следующим оператором:

SELECT event_id, count(event_id) as occurence
FROM event
GROUP BY event_id
ORDER BY occurence DESC
LIMIT 50

Выходные данные:

 event_id | occurence
---------------------
 1234567  | 56678
 8901234  | 86753

Для каждого event_id из выходной таблицы мне нужно выполнить оператор SELECT, например:

SELECT * FROM event WHERE event_id = 'event_id from result row'

Ожидаемый результат:

 event_id | even_type | event_time
 ----------------------------
 1234567  | .......   | .......
 1234567  | .......   | .......



 8901234  | .......   | .......
 8901234  | .......   | .......

InДругими словами: мне нужно получить 50 наиболее часто встречающихся event_ids из таблицы event и затем извлечь все доступные данные для этих конкретных событий.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Не нужно даже присоединяться - просто используйте функцию окна!Смотрите ниже:

SELECT *
FROM (
    SELECT  
        *, 
        COUNT(*) OVER(PARTITION BY event_id) AS event_count 
    FROM event 
) A 
ORDER BY event_count DESC
LIMIT 50 
0 голосов
/ 12 февраля 2019

Вероятно, есть несколько способов справиться с этим, но есть один способ:

SELECT  a.*, b.event_type, b.event_time
FROM
(
    SELECT event_id, count(event_id) as occurence
    FROM event
    GROUP BY event_id
    ORDER BY occurence DESC
    LIMIT 50
) a
JOIN event b ON (b.event_id = a.event_id)
;

Вместо определенных столбцов из того, что я назвал 'b', вы можете выбрать b. * Для всех столбцов.

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