2014-06-08 3 views
0

내 표는 다음과 같습니다PHP MySQL의 : COUNT/SUM 다른 값이 아닌 정수 열이

ID | click | time | browser 

1  1  [01:00:00]  FireFox 
2  1  [01:00:00]  FireFox 
3  0  [01:00:00]  Opera 
4  1  [02:00:00]  FireFox 
5  1  [02:00:00]  Chrome 
6  1  [02:00:00]  Chrome 

그래서 출력해야한다 : 나는 브라우저없이 얻을하는 방법을 알고

01:00:00 
Total hits: 3 
Clicks: 2 
FireFox: 2 
Opera: 1 

02:00:00 
Total hits: 3 
Clicks: 3 
FireFox: 1 
Chrome: 2 

:

SELECT SUM(click) AS click, COUNT(*), HOUR(time) 
FROM hits 
WHERE time >= DATE_SUB(NOW(),INTERVAL 24 HOUR) GROUP BY HOUR(time) 

하지만 브라우저에서는이 사실을 알 수 없습니다. 나는 브라우저가 그룹화되지 않을 수있는 모든 경우에 상관 없어 나는이 같은 출력을 얻을 :

01:00:00 
Total hits: 3 
Clicks: 2 

02:00:00 
Total hits: 3 
Clicks: 3 
----------- 

FireFox: 3 
Chrome: 2 
Opera: 1 

답변

1

당신은 IF를 사용할 수 있습니다

SELECT SUM(`click`) AS click 
    , COUNT(*) 
    , HOUR(`time`) 
    , COUNT(IF(`browser` = 'Chrome', `browser`, null)) AS `Chrome` 
    , COUNT(IF(`browser` = 'Opera', `browser`, null)) AS `Opera` 
    , COUNT(IF(`browser` = 'FireFox', `browser`, null)) AS 'FireFox' 
FROM `hits` 
WHERE `time` >= DATE_SUB(NOW(),INTERVAL 24 HOUR) 
GROUP BY HOUR(`time`) 

또는 CASE :

SELECT SUM(`click`) AS click 
    , COUNT(*) 
    , HOUR(`time`) 
    , COUNT(CASE WHEN `browser` = 'Chrome' THEN `browser` END) AS `Chrome` 
    , COUNT(CASE WHEN `browser` = 'Opera' THEN `browser` END) AS `Opera` 
    , COUNT(CASE WHEN `browser` = 'FireFox' THEN `browser` END) AS 'FireFox' 
FROM `hits` 
WHERE `time` >= DATE_SUB(NOW(),INTERVAL 24 HOUR) 
GROUP BY HOUR(`time`) 
+0

좋아 고마워! 하지만 또 다른 질문이 있습니다. 나는 국가와 같은 상황이다. 따라서 브라우저 대신 특정 국가에서 얼마나 많은 방문이 있었는지 계산하고 싶습니다. 국가 란에서 국가 코드를 저장합니다. 그러나 만약 내가 당신의 답을 좋아한다면, 나는 엄청난 질문을 할 것이다. – yoshi

+0

다음과 같은 쿼리가 가능합니다 :'COUNT (country_code) AS country_code' – yoshi

+0

@yoshi : 안타깝게도, MySQL에서는'CASE' 또는'IF'를 여러 개 사용하지 않으면 불가능합니다. – potashin