2013-09-06 3 views
0

나쁜 제목입니다.월별 계산 쿼리에서 가장 많은 수를 얻는 것

필자는 PHP에서이 작업을 매우 쉽게 할 수 있지만 SQL 쿼리를 사용할 수 있는지 알고 싶습니다.

내 사이트에 새 회원을 보여주는 막대 차트가 생성됩니다.

JAN | FEB | MAR | APR 
-----|-------|-------|------------- 
101 | 163 | 282 | 233 

이것은 내가 지금까지 무엇을했는지 있습니다 :

SELECT DATE_FORMAT(created, '%Y') as 'year', 
DATE_FORMAT(created, '%b') as 'month', 
IFNULL(COUNT(user_id),0) as 'total' 
FROM users 
WHERE DATE_FORMAT(created, %Y) = 2013 
GROUP BY DATE_FORMAT(created, '%Y%m') 

을하지만 막대 그래프를 개발하기 위해, 나는 가장 높은 횟수가 무엇인지 알 필요가있다. 위 예제에서 을 가장 많이 계산하고 싶습니다. 따라서 막대의 백분율을 계산할 수 있습니다.

가능한가요? 아마도 서브 쿼리가 필요 하겠지만 성능을위한 최상의 방법에 대해서는 확신 할 수 없다고 생각합니다.

이것은 내가 돌아 싶은 것입니다 :

JAN | FEB | MAR | APR | Highest_Count 
-----|-------|-------|-------|-------------- 
101 | 163 | 282 | 233 | 282 

답변

1

SQL Fiddle

의 MySQL 5.5.32 스키마 설정 :

CREATE TABLE users 
    (`user_id` int, `created` date) 
; 

INSERT INTO users 
    (`user_id`, `created`) 
VALUES 
    (1, '2013-01-01'), 
    (2, '2013-01-03'), 
    (3, '2013-01-07'), 
    (4, '2013-02-01'), 
    (5, '2013-02-04'), 
    (6, '2013-03-04') 
; 

검색어 1 :

SELECT DATE_FORMAT(u.created, '%Y') as 'year', 
     DATE_FORMAT(u.created, '%b') as 'month', 
     IFNULL(COUNT(u.user_id),0) as 'total', 
     r2.Highest_Count, 
     IFNULL(COUNT(u.user_id),0)/r2.Highest_Count as 'percentage' 
FROM users u 
INNER JOIN (
    SELECT r1.year, max(r1.Total) as Highest_Count 
    FROM ( 
     SELECT DATE_FORMAT(created, '%Y') as 'year', 
     DATE_FORMAT(created, '%b') as 'month', 
     IFNULL(COUNT(user_id),0) as 'total' 
     FROM users 
     WHERE DATE_FORMAT(created, '%Y') = 2013 
     GROUP BY DATE_FORMAT(created, '%Y%m')) AS r1 
    GROUP BY r1.year) AS r2 ON r2.year = DATE_FORMAT(u.created, '%Y') 
WHERE DATE_FORMAT(u.created, '%Y') = 2013 
GROUP BY DATE_FORMAT(u.created, '%Y%m') 

Results :

| YEAR | MONTH | TOTAL | HIGHEST_COUNT | PERCENTAGE | 
|------|-------|-------|---------------|------------| 
| 2013 | Jan |  3 |    3 |   1 | 
| 2013 | Feb |  2 |    3 |  0.6667 | 
| 2013 | Mar |  1 |    3 |  0.3333 | 
+0

나는 얼마나 감사하고 있는지 말할 수 없다. 고마워. 그것은 처음에 생각한 것보다 두 배 복잡하지만 이해할 만합니다. – TheCarver

-1

당신이 사용할 수있는 - 거기에서

SELECT MAX(`user_id`) FROM `users` 

을 당신이 그것을 포맷 할 수 있습니다.

SRC = http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column.html

+0

TS는 분명히 모든 행을 원하지만 또한 그 비율을 보여주고 싶어 -이 그가위한 최대를 원하는 것입니다. 또한, 그는 pure SQL (PHP 후 처리가 아님)에서 원합니다. 그래서 최대 행과 모든 행. – Cthulhu

관련 문제