복붙노트

[SQL] SQL 오류 : 골재의 오용

SQL

SQL 오류 : 골재의 오용

SQLite는 버전 3.4.0 집계 함수 잘못은 무엇입니까? 또한, 나는 ORDER BY가 잘 작동하지 않습니다 생각한다. 이 문제를 어떻게 재 작성?

sqlite> SELECT p1.domain_id, p2.domain_id, COUNT(p1.domain_id) AS d1, COUNT(p2.domain_id) AS d2
   ...> FROM PDB as p1, Interacting_PDBs as i1, PDB as p2, Interacting_PDBs as i2
   ...> WHERE p1.id = i1.PDB_first_id
   ...> AND p2.id = i2.PDB_second_id
   ...> AND i1.id = i2.id
   ...> AND d1>100
   ...> AND d2>100
   ...> ORDER BY d1, d2;
SQL error: misuse of aggregate: 
sqlite>

해결법

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

    1.집계 함수 (합계 / 수 / ...)를 사용하는 경우, 당신은 또한 GROUP BY 절을 이용해야한다.

    집계 함수 (합계 / 수 / ...)를 사용하는 경우, 당신은 또한 GROUP BY 절을 이용해야한다.

    당신이 집계 한 결과에 필터링 할 때 그 옆에는, 당신은 WHERE 절에서 그렇게 할 수는 없지만, HAVING 절에서 그렇게해야합니다.

    SELECT p1.domain_id, p2.domain_id, COUNT(p1.domain_id) AS d1, COUNT(p2.domain_id) AS d2
        FROM PDB as p1, Interacting_PDBs as i1, PDB as p2, Interacting_PDBs as i2
        WHERE p1.id = i1.PDB_first_id
        AND p2.id = i2.PDB_second_id
        AND i1.id = i2.id
    GROUP BY p1.domain_Id, p2.domain_Id
    HAVING d1 > 100 AND d2 > 100
    ORDER BY d1, d2;
    
  2. ==============================

    2.이것에 대한 짧은 버전의 수정은 다음과 같습니다

    이것에 대한 짧은 버전의 수정은 다음과 같습니다

    당신이 COUNT / SUM과 같은 기능을 사용하는 경우, 대신 WHERE의 HAVING 사용해야합니다.

  3. from https://stackoverflow.com/questions/648083/sql-error-misuse-of-aggregate by cc-by-sa and MIT license