2013-05-21 3 views
2

두 개의 테이블이 있습니다. 팀 및 플레이어. 내가하고 싶은 일은 가장 큰 팀의 급여에 대한 통계 데이터를 알려주는 쿼리를 만드는 것입니다. 특히 나는 많은 플레이어가 5K 미만으로 만드는 횟수를 원합니다. 얼마나 많은 플레이어가 5K와 10K 사이에서 ... 최대 플레이어에게 5K 씩 증가합니다.MySQL에서 계층화 된 데이터 가져 오기

CREATE TABLE `formsfiles`.`Teams` (
    `ID` INT NOT NULL AUTO_INCREMENT , 
    `Name` VARCHAR(45) NULL , 
    PRIMARY KEY (`ID`)); 


INSERT INTO `Teams` (`Name`) VALUES ('Sharks'); 
INSERT INTO `Teams` (`Name`) VALUES ('Jets'); 
INSERT INTO `Teams` (`Name`) VALUES ('Fish'); 
INSERT INTO `Teams` (`Name`) VALUES ('Dodgers'); 


CREATE TABLE `Players` (
    `ID` INT NOT NULL AUTO_INCREMENT , 
    `Name` VARCHAR(45) NULL , 
    `Team_ID` INT NULL , 
    `Salary` INT NUll , 
    PRIMARY KEY (`ID`)); 

INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Jim', '1', '4800'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Tom', '1', '12000'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Harry', '2', '1230'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Dave', '2', '19870'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Tim', '3', '1540'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Trey', '4','7340'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Jay', '4', '4800'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Steve', '4','6610'); 
INSERT INTO `Players` (`Name`, `Team_ID`, salary) VALUES ('Chris', '4','17754'); 

이 데이터를 감안할 때 : : 여기

는 SQL입니다이 코드 보인다면

0-5000  1 
5000-10000 2 
10000-15000 0 
15000-20000 1 

: 다저스가 가장 큰 팀 (ID = 4) 우리의 출력을 싶습니다 익숙한 것은 내가 여기 게시 한 이전 문제의 진화이기 때문입니다. 친절하게 나를 때리지 마라!

+0

당신은 그들을 조건들과 합집합으로 간단히 선택할 수 있습니다. – rcpayan

답변

1

의 수와 행을 얻을 수 있는지 확인하기 위해 당신 그것은 범위의 하한 경계와 항목 수를 반환

SELECT 5000 * FLOOR(Salary/5000), count(*) 
FROM Players 
WHERE Team_ID = 4 
GROUP BY FLOOR(Salary/5000) 

원하는

0  1 
5000  2 
15000 1 

빈 범위가 반환되지 않습니다.

3

여기 내 시도입니다. 이 조건을 만족 조인을 사용

select sr.range, 
     SUM(case when p.salary >= sr.low and p.salary < sr.high then 1 else 0 end)   
from Players p join 
    (select t.id 
     from Players p join 
      Teams t 
      on p.team_id = t.id 
     group by t.team_id 
     order by SUM(p.salary) desc 
     limit 1 
    ) team 
    on p.team_id = team.id cross join 
    (select '0-5000' as range, 0 as low, 5000 as high union all 
     select '5000-10000', 5000, 10000 union all 
     select '10000-15000', 10000, 15000 union all 
     select '15000-20000', 15000, 20000 
    ) sr 
group by sr.range 
order by min(sr.low) 

공지 사항 범위에 대해 별도의 쿼리의 사용, 당신은이 코드는 거의 무엇을 할 것인가 0

관련 문제