2016-08-06 4 views
0

한 열의 모든 값을 계산 한 다음이 값에 다른 테이블의 값을 곱하려고합니다. 지금까지 내가 가지고 :다른 테이블의 값과 열의 값의 합계를 곱하십시오.

SELECT CLUB_FEE * COUNT(MEMBER_ID) AS VALUE 
FROM CLUB, SUBSCRIPTION 
WHERE CLUB_ID = 'CLUB1'; 

이 작동하지 않습니다, 아무도 도와 줄 수 있습니까?

또한 여러 클럽에서 도움이 필요합니다. 모든 클럽에 대해 하나의 성명서로 모두이를 수행 한 다음 평균을 얻을 수 있습니까? 영업 이익이 질문에 COUNT()를 지정하기 때문에,

SELECT SUM(c.CLUB_FEE) AS VALUE 
FROM CLUB c JOIN 
    SUBSCRIPTION s 
    ON c.CLUB_ID = s.CLUB_ID 
WHERE c.CLUB_ID = 'CLUB1'; 

내가 첫 번째 버전은 명확 것이라고 생각 :로

SELECT MAX(c.CLUB_FEE) * COUNT(MEMBER_ID) AS VALUE 
FROM CLUB c JOIN 
    SUBSCRIPTION s 
    ON c.CLUB_ID = s.CLUB_ID 
WHERE c.CLUB_ID = 'CLUB1'; 

당신은이를 작성할 수 있습니다

+0

예제 데이터와 예상 출력을 추가하십시오 –

+0

질문을 수정하고 샘플 데이터와 원하는 결과를 제공하십시오. –

+0

[잘못된 습관 : 오래된 스타일의 조인 사용] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins. aspx) - ANSI - ** 92 ** SQL 표준에서 ** * ANSI'JOIN' 구문으로 구식 * 쉼표로 분리 된 테이블 * 스타일 목록이 * 20 년 전 **로 대체되었습니다. 그 사용은 권장하지 않습니다 –

답변

1

은 아마도,이 같은 의도 . 구독자가있는 모든 클럽을 원하는 경우

:

SELECT SUM(c.CLUB_FEE) AS VALUE 
FROM CLUB c JOIN 
    SUBSCRIPTION s 
    ON c.CLUB_ID = s.CLUB_ID 
GROUP BY c.CLUB_ID; 
+0

CLUB_FEE에서 MAX가 필요한 이유는 무엇입니까? 각 CLUB_ID에 대해 하나의 CLUB_FEE 만 있어야합니다 (그렇지 않으면 차별화 된 수수료가있는 경우 VALUE는 단순히 회원 수와 최대 수수료를 곱해서는 안됩니다). – mathguy

+0

@mathguy. . . 그렇지 않으면'group by '이 필요할 것이다. –

+0

그래, 방금 깨달았다. 독창적 인 club_fee의 선택이 클럽 테이블로 밀리는 지 여부를 생각하면서 ... 설명 계획을 가지고 노는 것. – mathguy

0

Explain 스 계획을 검사에서는, 조인을 방지하고 하나의 집계를 사용하기 때문에 다음 버전 (좀 더 효율적일 수 있습니다 보인다). 동시에 모든 클럽에이를 필요로한다면 아마도 모든 솔루션은 동일한 "최적화 비용"을 갖게 될 것입니다 (그들은 어느 시점 에든 참여할 것입니다).

select club_fee * (select count(member_id) from subscription where club_id = 'CLUB1') 
from club 
where club_id = 'CLUB1' 

은 이제 유일한 집계 함수는 하위 쿼리에 밀려 나머지는 중 하나에 가입하거나 다른 집계 함수가 필요하지 않습니다.

물론 성능이 중요한 경우에만 문제가됩니다. 그것은 아주 좋지 않을 수 있습니다.

관련 문제