2014-11-27 1 views
2

나는 2 개의 테이블 로그를 보유하고 있고 각각 하나가 타임 스탬프를 보유하고 있지만 다른 이름으로 추적합니다. 이제는 주어진 상점에 대해 하루에 모든 로그를 얻으려고합니다. 내 트랙 테이블하루에 선택 COUNT (*)에서 2 개의 쿼리 병합

SELECT DATE(clicktime), COUNT(shop) 
FROM LOG 
WHERE shop = "shop01" 
AND (clicktime > DATE_SUB(NOW(), INTERVAL 30 DAY)) 
GROUP BY DATE(clicktime); 

이 쿼리에서 하루 트랙의 수는 하루에 로그 테이블에있는 모든 항목을 수집하고 내 두 번째 표에 하루 매출을 얻을

-------------------------------- 
ClickTime   | Clicks 
-------------------------------- 
2014-12-25   | 342  
-------------------------------- 
2014-12-24   | 232 
-------------------------------- 

같은 결과가 보인다 다음

,251,578,358,

출력

-------------------------------- 
SaleTime   | sales 
-------------------------------- 
2014-12-25   | 42  
-------------------------------- 
2014-12-24   | 32 
-------------------------------- 

그리고

----------------------------------------- 
Time    | sales | clicks 
----------------------------------------- 
2014-12-25   | 42  | 342 
----------------------------------------- 
2014-12-24   | 32  | 232 
----------------------------------------- 
내가 서브 쿼리로 조합을 사용하려고했다

같은 출력을 가지고하는 일이이 쿼리를 병합하고 싶지만이 하나가 작동하지 않을 수 있습니다 많은 경우 테이블 구조가 다를 수 있으므로

원하는 것을 얻을 수있는 방법이 있습니까?

답변

2

이 시도 :

SELECT A.clicktime, A.shopCnt, B.saleCount 
FROM (SELECT DATE(clicktime) clicktime, COUNT(shop) AS shopCnt 
     FROM LOG 
     WHERE shop = "shop01" 
     AND (clicktime > DATE_SUB(NOW(), INTERVAL 30 DAY)) 
     GROUP BY DATE(clicktime) 
    ) AS A 
INNER JOIN (SELECT DATE(last_change) AS SaleTime, COUNT(shop) AS saleCount 
       FROM tracks 
       WHERE shop = "dd01" 
       AND (last_change > DATE_SUB(NOW(), INTERVAL 30 DAY)) 
       AND relevant = 1 
       GROUP BY DATE(last_change) 
      ) AS B ON A.clicktime = B.SaleTime 
+0

고맙습니다. – fefe

+0

답변을 수락하기를 기다리는 중! – fefe

1

난 강력하게 당신이 union 모든 접근 방식보다는 inner join를 사용하는 것이 좋습니다 것입니다. 판매 또는 클릭이없는 날이있는 경우 join은 기록을 삭제합니다.

SELECT date, SUM(sales) as sales, SUM(clicks) as clicks 
FROM ((SELECT DATE(last_change) as date, COUNT(*) as sales, 0 as clicks 
     FROM tracks 
     WHERE shop = 'dd01' AND (last_change > DATE_SUB(NOW(), INTERVAL 30 DAY)) AND relevant = 1 
     GROUP BY DATE(last_change) 
    ) 
     UNION ALL 
     (SELECT DATE(clicktime) as date, 0 as sales, COUNT(*) as clicks 
     FROM LOG 
     WHERE shop = 'shop01' AND (clicktime > DATE_SUB(NOW(), INTERVAL 30 DAY)) 
     GROUP BY DATE(clicktime) 
    ) 
    ) d 
GROUP BY date; 
+0

제안 및 코드에 대해 감사드립니다. – fefe