2017-11-01 2 views
0

두 테이블 : CINEMA(Cinemano, Cname)EMPLOYEE(Empno, Firstname, Surname, Cinemano)이 있습니다.COUNT 함수가있는 SQL 다중 테이블,보다 큼 및 조인

는 내가이 일을 시도 개 이상의 직원

을 사용 영화관의 영화 이름을 나열해야합니다

SELECT e.CINEMANO, c.CNAME, c.CINEMANO, COUNT(e.CINEMANO) 
FROM EMPLOYEE e JOIN CINEMA c 
ON (e.cinemano = c.cinemano) 
GROUP BY c.CNAME 
HAVING COUNT(e.CINEMANO) > 4; 

분명히 '표현에 의해 그룹이 아닌'말을 작동하지 않는다.

+1

선택에서 'CINEMANO' 참조를 모두 제거해야합니다. – dnoeth

+0

A JOINT? 너 무슨 담배 야? ** 참고 ** : 설명해야 할 농담은 농담이 아닙니다. 그러나 이것을 읽는 비영어권 사람들이있을 수 있습니다. https://www.urbandictionary.com/define.php?term=joint – mathguy

+0

올바른 답변을 얻거나 문제를 해결할 수있게되면 사이트에서 응답을 "수락"해야합니다. 1 초 미만의 시간이 소요됩니다. 답의 왼쪽에있는 눈금을 클릭하면됩니다. 귀하의 질문과 같이 당신 만이 이것을 할 수 있습니다. 그것은 우리가 다른 사람들을 도울 수 있도록 문제가 해결되었음을 나타냅니다. 그런데 그 수용을 위해 2 점을 얻습니다. 자세한 내용은 [도움]을 참조하십시오. –

답변

0

4 명 이상의 직원과 바로 영화관을 가져 오기 :

SELECT * 
FROM CINEMA 
WHERE Cinemano in 
(
    SELECT Cinemano 
    FROM EMPLOYEE 
    GROUP BY Cinemano 
    HAVING COUNT(*)>4 
) 

아직도 이름을 받고 수 :

SELECT c.Cinemano, c.Cname, COUNT(*) EmployeeCount 
FROM EMPLOYEE e 
    INNER JOIN CINEMA c ON e.Cinemano= c.Cinemano 
GROUP BY c.Cinemano, c.Cname 
HAVING COUNT(*) > 4; 
+0

대단히 감사합니다! 그것은 많은 도움이되었습니다! – Roman

0

당신은 집계를하지 수행하는 모든 열을 반복해야 기능 (예 : COUNT()MIN()MAX() 등)을 group by 절에 입력하십시오. 그래서 :

SELECT 
     e.CINEMANO 
    , c.CNAME 
    , c.CINEMANO 
    , COUNT(*) 
FROM EMPLOYEE e 
JOIN CINEMA c ON e.cinemano = c.cinemano 
GROUP BY 
     e.CINEMANO 
    , c.CNAME 
    , c.CINEMANO 
HAVING COUNT(*) > 4 
; 

대안 이렇게 대신 window function을 사용할 수도 :

카운트는 각 파티션 "위에"수행 (그리고 그 결과는 데이터의 각 행에 가능) 여기
SELECT 
     e.CINEMANO 
    , c.CNAME 
    , c.CINEMANO 
FROM (
     SELECT 
      e.CINEMANO 
      , c.CNAME 
      , c.CINEMANO 
      , COUNT(*) OVER (PARTITION BY e.CINEMANO) counter 
     FROM EMPLOYEE e 
     JOIN CINEMA c ON e.cinemano = c.cinemano 
    ) d 
WHERE counter > 4 
; 

따라서 표시된대로 계산을 필터링 할 수 있습니다.

+0

감사합니다. 많이 받았습니다! – Roman