MySQL:从多列中获取唯一计数

时间:2017-01-17 20:45:31

标签: mysql distinct

SELECT numTimesIndexLoaded, numTimesIndexLoadedUnique, numTimesResultsLoaded, numTimesResultsLoadedUnique, numTimesCTALoaded, numTimesCTALoadedUnique
FROM
(SELECT
sum(ctaSL.page = 'index') AS numTimesIndexLoaded,
sum(ctaSL.page = 'results') AS numTimesResultsLoaded,
sum(ctaSL.page = 'cta') AS numTimesCTALoaded,
count(distinct ctaSL.ip_address, ctaSL.page = 'index') AS numTimesIndexLoadedUnique,
count(distinct ctaSL.ip_address, ctaSL.page = 'results') AS numTimesResultsLoadedUnique,
count(distinct ctaSL.ip_address, ctaSL.page = 'cta') AS numTimesCTALoadedUnique
FROM
stats_page_loads AS ctaSL
WHERE ctaSL.campaign_id = ?
    AND ctaSL.mode = ?
) t1

我有以下准备好的声明,我试图获取网页的统计信息。目标是同时获取三个页面中每个页面加载次数的统计数据,以及三个页面中每个页面的唯一IP地址加载的次数。我是新手使用不同的,所以甚至不确定它是否正确使用,但我没有得到正确的结果所以我假设我正在使用错了。

我想我可以将另一个SELECT语句作为t2,但是我试图避免这种情况,因为我必须添加?我一次又一次地添加变量,如果可能的话,希望将它压缩成一个。

1 个答案:

答案 0 :(得分:1)

尝试:

count(DISTINCT CASE WHEN ctaSL.page = 'index' THEN ctaSL.ip_address END) AS numTimesIndexLoadedUnique,

和其他情况类似。这是有效的,因为CASE如果NULL子句中没有一个匹配,则返回WHEN,而COUNT不会计算NULL

您的尝试无效,因为测试只会返回01,具体取决于它们是否成功,并且您只是计算IP的所有不同组合布尔值。它不排除条件失败的行。

相关问题