2012-10-26 2 views
0

내가 가지고있는 다음과 같은 세 가지 쿼리같은 필드로 그룹화하는 이러한 쿼리를 결합하는 방법은 무엇입니까?

SELECT COUNT(*) as cached_type_a, DATE(datetime) as datetime 
    FROM requests 
    WHERE cached = 'a' 
    GROUP BY DAY(datetime); 

SELECT COUNT(*) as cached_type_b, DATE(datetime) as datetime 
    FROM requests 
    WHERE cached = 'b' 
    GROUP BY DAY(datetime); 

SELECT COUNT(*) as cached_type_c, DATE(datetime) as datetime 
    FROM requests 
    WHERE cached = 'c' 
    GROUP BY DAY(datetime); 

가 4 열

cached_type_a, cached_type_b, cached_type_c, datetime와 단일 쿼리로 결합 할 수 있습니까? 당신이 캐시의 여러 번호가있는 경우

답변

1

당신이 cache의 세 가지 값이있는 경우, 당신은이를 사용할 수 있습니다, 그렇지 않으면

SELECT DATE(datetime) as datetime, 
     SUM(CASE WHEN cached = 'a' THEN 1 ELSE 0 END) cached_a, 
     SUM(CASE WHEN cached = 'b' THEN 1 ELSE 0 END) cached_b, 
     SUM(CASE WHEN cached = 'c' THEN 1 ELSE 0 END) cached_c 
FROM requests 
GROUP BY DAY(datetime) 

, 당신은 Prepared Statement

SET @sql = NULL; 
SELECT 
    GROUP_CONCAT(DISTINCT 
    CONCAT(
     'SUM(CASE WHEN cached = ''', 
     cached, 
     ''' then 1 ELSE 0 end) AS ', 
     CONCAT('cached_',cached) 
    ) 
) INTO @sql 
FROM requests; 

SET @sql = CONCAT('SELECT DATE(datetime) as datetime, ', @sql, ' 
        FROM requests 
        GROUP BY DAY(datetime)'); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 
+0

감사를 사용할 수 있습니다 ! SUM 문을'SUM (1)'로 나누고 '100'을 곱하는 방법이 있습니까? – user784637

+0

어, 왜'SUM (1)'인가? –

+0

이것은 하루에 모든 레코드의 합계입니다. 예 : SELECT DATE (datetime) as datetime, SUM (1) total, SUM (캐시 된 'a'THEN 1 ELSE 0 END) cached_a, ... ' – user784637

0
SELECT COUNT(a.datetime) as cached_type_a, 
     COUNT(b.datetime) as cached_type_b, 
     COUNT(c.datetime) as cached_type_c, 
     DATE(a.datetime) as datetime 
FROM requests a, 
     requests b, 
     requests c, 
WHERE a.cached = 'a' 
    and b.cached = 'b' 
    and c.cached = 'c' 
GROUP BY DAY(a.datetime), DAY(b.datetime), DAY(c.datetime); 
관련 문제