2016-10-09 2 views
0

간단한 구성이 있습니다. 2 테이블이 다 대다 관계로 연결되어 있으므로 3 개의 테이블이 있습니다.여러 개의 매개 변수가있는 GROUP BY 및 COUNT

표 저자 :

idAuthor INT 
name VARCHAR 

표 간행물 :

idPublication INT, 
title VARCHAR, 
date YEAR, 
type VARCHAR, 
conference VARCHAR, 
journal VARCHAR 

표 author_has_publication :

Author_idAuthor, 
Publication_idPublication 

나는 적어도이 개 논문을 발표 한 모든 저자의 이름을 얻기 위해 노력하고 있어요 회의 SIGMOD 및 회의 PVLDB. 지금 당장이 작업을 수행했지만 여전히 두 가지 결과가 나타납니다. 내 쿼리 :

SELECT author.name, publication.journal, COUNT(*) 
FROM author 
INNER JOIN author_has_publication 
    ON author.idAuthor = author_has_publication.Author_idAuthor 
INNER JOIN publication 
    ON author_has_publication.Publication_idPublication = publication.idPublication 
GROUP BY publication.journal, author.name 
HAVING COUNT(*) >= 2 
    AND (publication.journal = 'PVLDB' OR publication.journal = 'SIGMOD'); 

반환

+-------+---------+----------+ 
| name | journal | COUNT(*) | 
+-------+---------+----------+ 
| Renee | PVLDB |  2 | 
| Renee | SIGMOD |  2 | 
+-------+---------+----------+ 

당신은 그냥 1 시간 이름을 원하는대로 결과가 정확하지만 두 배로 볼 수 있듯이

.

다른 질문, 단 하나의 회의에 대한 number 매개 변수를 수정하는 방법 (예 : 최소한 3 개의 SIGMOD 및 최소 1 개의 PVLDB를 게시 한 모든 저자 확보)

답변

1

journal에 신경 쓰지 않는다면 선택하지 마세요. 결과가 나뉘어집니다. 또한, 일반 필터는 WHERE 절에 배치 할 필요가 아닌 HAVING 절 :

SELECT author.name, COUNT(*) 
    FROM author 
INNER JOIN author_has_publication 
    ON author.idAuthor = author_has_publication.Author_idAuthor 
INNER JOIN publication 
    ON author_has_publication.Publication_idPublication = 
     publication.idPublication 
WHERE publication.journal IN('PVLDB','SIGMOD')  
GROUP BY author.name 
HAVING COUNT(CASE WHEN publication.journal = 'SIGMOD' THEN 1 END) >= 2 
    AND COUNT(CASE WHEN publication.journal = 'PVLDB' THEN 1 END) >= 2; 

두 번째 질문의 경우,이 HAVING() 절을 사용

HAVING COUNT(CASE WHEN publication.journal = 'SIGMOD' THEN 1 END) >= 3 
    AND COUNT(CASE WHEN publication.journal = 'PVLDB' THEN 1 END) >= 1; 
+0

그것은 또한 반환하기 때문에이 작동하지 않습니다 저자는 PVLDB 및 SIGMOD 회의에 대한 출판물이 2 개 미만인 경우 각 회의 간행물을 분리하여 계산하는 것이 어려우므로 –

+0

질문을 오해했습니다. 지금 작업해야합니다. @Mayeulsgc – sagi

+0

덕분에, 나는 같은 요청으로 GROUP BY, WHERE 및 HAVING을 사용하는 데 많은 어려움을 겪고있었습니다. –