[SQL] MySQL의 : 그룹 함수의 잘못된 사용
SQLMySQL의 : 그룹 함수의 잘못된 사용
내가 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.당신은 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.첫째, 당신이지고있는 오류는 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의 한 당 하나의 행을 취득하려면 그룹화 절을 적용했다.
from https://stackoverflow.com/questions/2330840/mysql-invalid-use-of-group-function by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 목록에있는 모든 항목과 일치하는 행의 선택 그룹 (0) | 2020.03.23 |
---|---|
[SQL] "절에"내 항목의 MySQL의 수 (0) | 2020.03.23 |
[SQL] SQL Server의 진수에서 0을 후행 제거 (0) | 2020.03.23 |
[SQL] PostgreSQL의 기능의 언어 SQL 및 언어 plpgsql의 차이 (0) | 2020.03.23 |
[SQL] SQL 서버 : GROUP BY 절에 쉼표로 구분 된 값을 얻을 [중복] (0) | 2020.03.23 |