【问题标题】:SELECT DISTINCT the data is distinct but not being filtered [closed]SELECT DISTINCT 数据不同但未被过滤[关闭]
【发布时间】:2011-10-10 19:11:04
【问题描述】:

试图跟踪 AdWords 访问会导致大量点击欺诈。

问题是日志过于热心,因此它经常会记录 1 次访问。这很明显,因为两个 timeip 是相同的。只是无法将其转换为 SQL。

这会在 IP 匹配且时间匹配时返回 2 次以上的点击。

SELECT DISTINCT wmf24_statpress.time, count(ip) AS clicks, ip 
FROM wmf24_statpress
WHERE urlrequested LIKE  '%gclid=%'  
GROUP BY ip

【问题讨论】:

  • 确实没有必要同时使用 Group By 子句和 Distinct 关键字。使用其中一种。在这种情况下,为了获得 Count,您需要 Group By,因此转储 Distinct 关键字。
  • 这与一小时前发布的(已关闭)问题非常相似。
  • 这不是一个真正的问题,如果您说明输入是什么样的,输出 是什么 以及输出应该是什么(只是一些相关的 sn-ps) 那么这个问题是可以回答的。就目前而言,您的查询效率有些低,但应该可以正常工作。正因为如此,你得到了错误的答案。投票结束。
  • 在标准 SQL 中,所有 ungrouped columns in the SELECT list 都必须出现在 GROUP BY 子句中。 MYSQL 允许 SELECT 列表中的非分组列。但这不是你想要的。你也想按时间分组。否则,所有相同的 ip 将被归为一组,并从组中随机抽取一次。

标签: mysql sql wordpress select distinct


【解决方案1】:

只需将time 添加到您的GROUP BY 子句中就可以了:

SELECT `time`, count(ip) AS clicks, ip 
FROM wmf24_statpress
WHERE urlrequested LIKE  '%gclid=%'  
GROUP BY `time`, ip

另外,您不需要distinct 子句

【讨论】:

  • 不诚实
  • 我的错,time 是保留字,现在应该可以使用
  • @Adrian,令人惊讶的是time 不是保留字,dev.mysql.com/doc/refman/5.5/en/reserved-words.html OP 只是没有提出完整详细的问题,因此无法给出正确答案。
  • @Johan Wow... 因为time 是一种数据类型,我只是假设它是一个保留字。去搞清楚。我同意问题的质量,只是赞成您的评论。
【解决方案2】:

按时间和 ip 分组以删除重复项并仍然看到重复项,即

SELECT wmf24_statpress.time, count(ip) AS clicks, ip 
FROM wmf24_statpress
WHERE urlrequested LIKE  '%gclid=%'  
GROUP BY wmf24_statpress.time, ip

【讨论】:

  • DISTINCTgroup by -all-fields-selected- 的简写,两者结合没有意义;删除不同的,查询将输出完全相同,只是更快。
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 2021-03-09
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多