2014-10-06 2 views
0

그래서 나는이 같은 두 개의 테이블, STOPS_AT 및 POINT_OF_INTEREST,이 사이에 최대 수를 찾으려고 :SQL - 두 개의 테이블

STOPS_AT [Route_ID, Stop_ID이]

POINT_OF_INTEREST을 [Stop_ID, 이름, 카테고리]

이제 관심 지점에서 가장 많은 정류장 수를 가진 Route_ID를 선택하려고합니다. 즉, POINT_OF_INTEREST 테이블에도 나타나는 정류장 수가 가장 많은 경로입니다. ,

select Route_ID 
from (select Route_ID, count(POINT_OF_INTEREST.Stop_ID) as cnt 
    from STOPS_AT R 
    group by Route_ID 
) rc join 
(select max(cnt) as maxcnt 
    from (select Route_ID, count(POINT_OF_INTEREST.Stop_ID) as cnt 
     from STOPS_AT 
     group by Route_ID 
     ) rc 
) m 
on rc.cnt = m.maxcnt; 

을하지만이 작동하지 않는 것 그것이 POINT_OF_INTEREST 테이블을 인식하지 못합니다 말 : 나는 다음을 시도?

답변

0

검색어가 point_of_interest 테이블에 포함되지 않아 오류가 발생합니다. 선택할 수없는 필드를 계산하려고합니다. 당신이 관계에 대해 걱정할 필요가없는 경우

, 하나 쉬운 방법은 limit을 사용하는 것입니다 : 관계에 관심이 있다면

select route_id 
from (
    select sa.route_id, count(*) cnt 
    from stops_at sa 
     join point_of_interest poi on sa.route_id = poi.route_id 
    group by sa.route_id 
) t 
order by cnt desc 
limit 1 

는, 당신은 위의를 사용하여 쿼리를 변경할 수 있습니다 :

select Route_ID 
from (
     select sa.route_id, count(*) cnt 
     from stops_at sa 
      join point_of_interest poi on sa.route_id = poi.route_id 
     group by sa.route_id 
) rc join 
(select max(cnt) as maxcnt 
    from (
      select sa.route_id, count(*) cnt 
      from stops_at sa 
       join point_of_interest poi on sa.route_id = poi.route_id 
      group by sa.route_id 
     ) rc 
) m 
on rc.cnt = m.maxcnt; 
+0

최대 값이 단일 경로에 속한다는 것을 제공하십시오. –

+0

@ PM77-1 - 예, 동의했습니다. 필요한 경우, OP는 일반적으로'사용자 정의 변수 (user-defined variables) '로 생성 된 관계를 지원하기 위해 MySQL 순위를 조사 할 수 있습니다. 또는이 하위 쿼리를 게시 된 실수 대신 사용할 수 있습니다. – sgeddes

+0

이 줄의 문제점은 다음과 같습니다. POINT_OF_INTEREST에 POI 가입 .Stop_ID = poi.Stop_ID – jnd