繁体   English   中英

如何在MySQL中使用附加的where子句选择count(distinct)?

[英]How to select count(distinct) with additional where clause in MySQL?

我有一个查询,看起来像这样:

SELECT clicks.offer_id, count(distinct clicks.transaction_id) as unique_clicks
FROM clicks
WHERE date > '2014-12-01 17:43:30' and offer_id = 1;

此查询通过商品的交易ID来计算唯一点击次数。

现在,我想为移动和桌面用户添加唯一的点击次数。 遵循以下原则:

SELECT clicks.offer_id, count(distinct clicks.transaction) as unique_clicks, 
     sum(case when clicks.mobile = 1 then 1 else 0 end) as mobile_unique_clicks, 
     sum(case when clicks.mobile = 0 then 1 else 0 end) as desktop_unique_clicks
FROM clicks
WHERE date > '2014-12-01 17:43:30' and offer_id = 1;

问题是它不会计算唯一的交易ID。 有没有一种方法可以执行一个查询? 为了保持这种效率,我需要什么样的覆盖指数?

SELECT clicks.offer_id, count(distinct clicks.transaction_id) as unique_clicks, 
     count(DISTINCT case when clicks.mobile = 1 then clicks.transaction_id else null end) as mobile_unique_clicks, 
     count(DISTINCT case when clicks.mobile = 0 then clicks.transaction_id else null end) as desktop_unique_clicks
FROM clicks
WHERE date > '2014-12-01 17:43:30' and offer_id = 1;

您可以使用COUNT(DISTINCT ...)

这样的东西?

SELECT clicks.offer_id,
       count(distinct clicks.transaction_id) as unique_clicks,
       sub.mobile_unique_clicks, 
       count(distinct clicks.transaction_id) - sub.mobile_unique_clicks as desktop_unique_clicks
FROM clicks
JOIN 
(
   SELECT clicks.offer_id, count(distinct clicks.transaction_id) as mobile_unique_clicks,
   FROM clicks
   WHERE date > '2014-12-01 17:43:30' and offer_id = 1 AND  clicks.mobile = 1
) sub
WHERE date > '2014-12-01 17:43:30' and offer_id = 1;

如果我正确理解了您的问题,则可以将查询移至subquery并使用distinct

select offer_id, 
       count(transaction) unique_clicks,
       count(case when mobile = 1 then 1 end) mobile_unique_clicks,
       count(case when mobile = 0 then 1 end) desktop_unique_clicks
from (
       select distinct offer_id, transaction, mobile
       from clicks
       where date > '2014-12-01 17:43:30' and offer_id = 1
) t
group by offer_id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM