복붙노트

[SQL] MySQL의 : 그룹 함수의 잘못된 사용

SQL

MySQL의 : 그룹 함수의 잘못된 사용

내가 MySQL을 사용하고 있습니다. 여기 내 스키마는 다음과 같습니다

공급자 (SID : 정수, SNAME : 문자열, 주소 문자열)

부품 (PID : 정수, PNAME : 문자열, 색상 : 문자열)

카탈로그 (SID : 정수, PID : 정수 비용 : 실제)

(기본 키가 굵게 표시되어있다)

나는 두 개 이상의 공급 업체에 의해 만들어진 모든 부분을 선택하는 쿼리를 작성하는 것을 시도하고있다 :

-- Find the pids of parts supplied by at least two different suppliers.
SELECT c1.pid                      -- select the pid
FROM Catalog AS c1                 -- from the Catalog table
WHERE c1.pid IN (                  -- where that pid is in the set:
    SELECT c2.pid                  -- of pids
    FROM Catalog AS c2             -- from catalog
    WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- where there are at least two corresponding sids
);

첫째로, 나는 심지어 올바른 방법으로 이것에 대해 갈거야?

둘째,이 오류가 발생합니다 :

내가 도대체 ​​뭘 잘못하고있는 겁니까?

해결법

  1. ==============================

    1.당신은 WHERE하지 HAVING 사용해야합니다.

    당신은 WHERE하지 HAVING 사용해야합니다.

    차이점은 : WHERE 절 필터 행을 MySQL을 선택합니다. 그리고 MySQL의 그룹 행을 함께 집계하여 COUNT 함수의 번호.

    HAVING는 COUNT 값을 계산 한 후 예상대로 작동합니다, 그래서 만은, 일이 WHERE 같다. 귀하의 하위 쿼리로 재 작성 :

    (                  -- where that pid is in the set:
    SELECT c2.pid                  -- of pids
    FROM Catalog AS c2             -- from catalog
    WHERE c2.pid = c1.pid
    HAVING COUNT(c2.sid) >= 2)
    
  2. ==============================

    2.첫째, 당신이지고있는 오류는 COUNT 함수를 사용하는 곳 때문이다 - 당신은 WHERE 절에 집계 (또는 그룹) 기능을 사용할 수 없습니다.

    첫째, 당신이지고있는 오류는 COUNT 함수를 사용하는 곳 때문이다 - 당신은 WHERE 절에 집계 (또는 그룹) 기능을 사용할 수 없습니다.

    둘째, 대신 하위 쿼리를 사용하는, 단순히 자체에 테이블을 조인

    SELECT a.pid 
    FROM Catalog as a LEFT JOIN Catalog as b USING( pid )
    WHERE a.sid != b.sid
    GROUP BY a.pid
    

    나는 적어도 두 행이 동일한 PID에 존재하는 유일한 행을 반환한다고 생각하지만, 적어도 2 개 실용 기자재가있다된다. 당신이 다시 PID I의 한 당 하나의 행을 취득하려면 그룹화 절을 적용했다.

  3. from https://stackoverflow.com/questions/2330840/mysql-invalid-use-of-group-function by cc-by-sa and MIT license