You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法构建ClickHouse查询:从点击日志表获取Top数据求助

嘿,我来帮你搞定这些Top数据的查询!先看你提供的表结构,咱们可以针对不同的Top需求来写ClickHouse查询,我整理了几个最常用的场景,你可以直接套用或者按需调整:

1. 全局Top广告(按总点击量排序)

这个是统计所有页面里每个广告的总点击次数,取排名靠前的N个广告,比如Top10:

SELECT ad_id, COUNT(*) AS click_count
FROM your_table_name -- 记得替换成你的实际表名
GROUP BY ad_id
ORDER BY click_count DESC
LIMIT 10; -- 这里的10可以改成你想要的Top数量
2. 每个页面独立的Top广告

如果需要看每个页面里点击量最高的广告(比如每个页面取Top3),可以用窗口函数来实现:

WITH page_ad_click_stats AS (
    SELECT 
        page_id,
        ad_id,
        COUNT(*) AS click_count,
        -- 按页面分组,给每个广告按点击量排名
        RANK() OVER (PARTITION BY page_id ORDER BY COUNT(*) DESC) AS ad_rank
    FROM your_table_name
    GROUP BY page_id, ad_id
)
SELECT page_id, ad_id, click_count
FROM page_ad_click_stats
WHERE ad_rank <= 3; -- 每个页面取Top3,可根据需求修改数值

如果想要每个页面只取唯一的第一名(即使有并列也只留一个),可以把RANK()换成ROW_NUMBER()。

3. 全局Top页面(按总点击量排序)

要是想知道哪个页面的总点击量最高,用这个查询就可以:

SELECT page_id, COUNT(*) AS total_clicks
FROM your_table_name
GROUP BY page_id
ORDER BY total_clicks DESC
LIMIT 5; -- 取Top5,按需调整
额外小提示
  • 如果需要筛选特定日期的数据,比如只查04/03/2009这天的,记得加WHERE条件:
    -- 如果date字段是String类型
    WHERE date = '04/03/2009'
    -- 如果date字段是Date类型(ClickHouse默认格式是YYYY-MM-DD),需要转换格式
    WHERE toDate(date, 'MM/DD/YYYY') = '2009-03-04'
    
  • 对于超大型日志表,ClickHouse的分组和排序效率很高,但如果数据量特别大,可以考虑先按日期分区,或者用PREWHERE来提前过滤数据,提升查询速度。

内容的提问来源于stack exchange,提问作者Loony Toonz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:42:38