0

我需要遍历一个表列并为每个值执行一个简单的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  | .......   | .......

换句话说:我需要event_idsevent表中获取最常发生的 50 个,然后检索这些特定事件的所有可用数据。

我怎样才能做到这一点?

4

2 回答 2

0

No need to even join - just simply use a window function! See below:

SELECT *
FROM (
    SELECT  
        *, 
        COUNT(*) OVER(PARTITION BY event_id) AS event_count 
    FROM event 
) A 
ORDER BY event_count DESC
LIMIT 50 
于 2019-02-11T22:58:13.477 回答
0

可能有几种方法可以处理此问题,但这是一种方法:

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.*。

于 2019-02-11T22:00:23.570 回答