2015-03-19 88 views
-1

如何计算在以下情况下每campaign有多少个唯一(hit_type = click)? :SQL SUM disctinct values

CREATE TABLE statistics 
    (`id` int, `uid` int, `hit_type` varchar(10), `name` varchar(55), `date` date) 
; 

INSERT INTO statistics 
    (`id`, `uid`, `hit_type`, `name`, `date`) 
VALUES 
    (1,'100','visit','campaign1','2015-03-18'), 
    (2,'100','visit','campaign1','2015-03-19'), 
    (3,'100','click','campaign1','2015-03-18'), 
    (4,'100','click','campaign1','2015-03-18'), 
    (5,'100','click','campaign1','2015-03-20'), 
    (6,'100','client','campaign1','2015-03-19'), 
    (7,'100','client','campaign1','2015-03-20'), 

    (8,'200','visit','campaign1','2015-03-19'), 
    (9,'200','visit','campaign1','2015-03-19'), 
    (10,'200','visit','campaign2','2015-03-20'), 
    (11,'200','click','campaign1','2015-03-18'), 
    (12,'200','click','campaign1','2015-03-19'), 
    (13,'200','client','campaign1','2015-03-19'), 
    (14,'200','client','campaign2','2015-03-20') 

; 
SELECT `name`, 
    SUM(IF(`hit_type` = 'click',1,0)) as click , 
    SUM(IF(`hit_type` = 'visit',1,0)) as visit, 
    SUM(IF(`hit_type` = 'client',1,0)) as client 
FROM `statistics` 
WHERE `name` IN('campaign1','campaign2') 
GROUP BY `name` 
ORDER BY `name` 
+2

这似乎[工作就好了(http://sqlfiddle.com/#!9/ cd772/1)。什么是你没有预料到的回报? – 2015-03-19 12:14:41

+0

“独特”是什么? – 2015-03-19 12:17:47

+0

yes功能正常,但结果不是我真正需要的,我需要删除重复的行,例如: (3,'100','click','campaign1','2015-03-18' ), (4,'100','点击','campaign1','2015-03-18'), 应该计算一次而不是两次。 – 2015-03-19 12:19:45

回答

1

如果您正在寻找独特日期,那么你可以做:

SELECT `name`, 
     COUNT(DISTINCT CASE WHEN `hit_type` = 'click' THEN date END) as click , 
     COUNT(DISTINCT CASE WHEN `hit_type` = 'visit' THEN date END) as visit, 
     COUNT(DISTINCT CASE WHEN `hit_type` = 'client' THEN date END) as client 
FROM `statistics` 
WHERE `name` IN('campaign1','campaign2') 
GROUP BY `name` 
ORDER BY `name`;