2009-03-12 5 views
1

화폐 거래가 포함 된 MySQL 데이터베이스에 테이블이 있습니다.일별 인스턴스 별 요약을위한 SQL 쿼리

id int, 
to_user int, 
from_user int, 
created datetime, 
amount double 

내가 하루에 표시 거래의 숫자로 그룹화 된 트랜잭션의 평균 금액을 반환하는 쿼리를 만들려고 해요 :의는 건의가 거래이라고 가정 해 봅시다. 해당 열은 금액 및 생성됩니다.

그래서 저는 0과 2 거래, 2 거래와 4 거래, 4 거래와 6 거래 등이있는 요일에 발생하는 평균 거래 금액은 얼마입니까?

아이디어가 있으십니까? 몇 가지 오해 후

+0

그래서 당신은 "하루에 거래 번호"와 같이 (거래의 평균 수를 필요로하는 BETWEEN function 체크 아웃) 또는 AMOUNT라는 열의 평균값은? – Quassnoi

+0

AMOUNT라는 열의 평균이 필요합니다. – Dave

답변

1
SELECT AVG(`num`), ((`num` - 1) DIV 2) * 2 AS `tier` 
FROM (
    SELECT DATE_FORMAT(`created`, '%Y-%m-%d') AS `day`, COUNT(*) AS `num` 
    FROM `yourtable` 
    GROUP BY 1 
) AS `src` 
GROUP BY `tier` 
1

은 마침내 당신이

SELECT cnt_range * 2 AS days_range, 
     CASE WHEN SUM(trans_cnt) > 0 THEN 
      SUM(trans_sum)/SUM(trans_cnt) 
      ELSE 0 
     END AS average_amount 
FROM (
     SELECT SUM(amount) AS trans_sum, 
       COUNT(*) AS trans_cnt, 
       FLOOR(COUNT(*)/2) AS cnt_range 
     FROM transactions 
     GROUP BY 
       TO_DATE(created) 
     ) ao 
GROUP BY 
     cnt_range 
+0

나는 "쿼리 1248 (42000) : 모든 파생 테이블에 고유 한 별칭이 있어야합니다."라는 메시지가 나타납니다. 실행 중 : 서버 버전 : 5.0.32-Debian_7etch6-log – Dave

+0

죄송합니다. 업데이트 된 게시물보기. – Quassnoi

1

여기에 시도이다 (하지만 테스트하지) : 필요한 것을 얻을 것 :

SELECT CASE WHEN txn_per_day BETWEEN 0 AND 2 THEN 2 
      WHEN txn_per_day BETWEEN 2 AND 4 THEN 4 
      WHEN txn_per_day BETWEEN 4 AND 6 THEN 6 
      ELSE 8 -- or more 
     END CASE AS num_txns, AVG(t3.amount) 
FROM (
    SELECT t1.*, COUNT(*) AS txn_per_day 
    FROM transactions t1 JOIN transactions t2 
    ON (TO_DAYS(t1.created) = TO_DAYS(t2.created)) 
    GROUP BY t1.id 
) t3 
GROUP BY num_txns; 

이 특히 빠른되지 않습니다. 보고서를 생성하는 것은 괜찮지 만, 예를 들어 PHP 요청 중에 실행해야하는 경우에는별로 좋지 않습니다.

SELECT AVG(`amount`) as `amount`, 
    DATE_FORMAT(`created`, '%Y-%m-%d') as `date` 
FROM `transactions` 
GROUP BY DATE_FORMAT(`created`, '%Y-%m-%d') 

같은

-1

시도 뭔가 Date-and-time functions에서 여기에 몇 가지 더보고 너무

+0

그럴 수 없어 - 특정 * 날짜를 찾고있는 중이 아니며 X 및 Y 트랜잭션 수 사이에있는 모든 날짜의 평균 금액을 찾고 있습니다. – Dave