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

解决SQL查询单日浏览多篇文章的观众ID返回重复结果问题

修复查询返回重复viewer_id的问题

问题原因

你的SQL子查询按viewer_id和view_date分组,当同一个观众(比如viewer_id=1)在多个日期都满足“当天浏览次数/文章数超过1”的条件时,子查询会返回多条该观众的记录。外层查询直接选取viewer_id,自然会出现重复值。

解决方案

方案1:外层查询添加DISTINCT去重

在最外层查询中加入DISTINCT关键字,直接过滤重复的viewer_id:

SELECT DISTINCT
  viewer_id
FROM
  (
    SELECT
      viewer_id,
      view_date,
      count(article_id) AS number_of_articles
    FROM
      playground.views
    GROUP BY
      viewer_id,
      view_date
    HAVING
      count(article_id) > 1
  ) a
ORDER BY
  viewer_id ASC

方案2:用EXISTS简化查询逻辑

通过EXISTS子查询直接判断观众是否存在同一天浏览不同文章的记录,这种写法天然保证viewer_id唯一:

SELECT DISTINCT v1.viewer_id
FROM playground.views v1
WHERE EXISTS (
    SELECT 1
    FROM playground.views v2
    WHERE v1.viewer_id = v2.viewer_id
      AND v1.view_date = v2.view_date
      AND v1.article_id != v2.article_id
)
ORDER BY v1.viewer_id ASC;

额外优化:精准匹配“多篇不同文章”

如果需求是同一天浏览至少两篇不同的文章(而非多次重复浏览同一篇),原查询的count(article_id)会误判重复浏览的情况。此时需要统计不同的文章ID:

SELECT DISTINCT
  viewer_id
FROM
  (
    SELECT
      viewer_id,
      view_date,
      count(DISTINCT article_id) AS number_of_articles
    FROM
      playground.views
    GROUP BY
      viewer_id,
      view_date
    HAVING
      count(DISTINCT article_id) > 1
  ) a
ORDER BY
  viewer_id ASC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:22:42