[SQL] PostgreSQL을 - GROUP BY 절
SQLPostgreSQL을 - GROUP BY 절
나는 또한이 일치 주어진 태그 얼마나 많은 태그로 검색 한 다음 해당 태그가 사용 된 모든 기사를 나열하고 싶습니다. 그래서 예를 들어 내가있을 수 있습니다 :
Page1 - 2 (has css and php tag)
Page2 - 1 (has only css tag)
질문:
SELECT COUNT(t.tag)
FROM a_tags t
JOIN w_articles2tag a2t ON a2t.tag = t.id
JOIN w_article a ON a.id = a2t.article
WHERE t.tag = 'css' OR t.tag = 'php'
GROUP BY t.tag
LIMIT 9
난 단지 COUNT (t.tag) 쿼리 작품을 놓고, 나는 괜찮아 결과를 얻을 때. 그러나 만약 내가 APPEND 예를 들어, 내가 오류 다음 얻을 내 문서의 ID :
어떻게 이런 일이 쿼리에 말했다 열을 추가하려면?
해결법
-
==============================
1.첫째, 포스트 그레스 9.1를 명확히 이상 (9.1의 릴리스 노트를 인용) ...
첫째, 포스트 그레스 9.1를 명확히 이상 (9.1의 릴리스 노트를 인용) ...
이 관련 답변 자세히보기 : 레일과 PostgreSQL을 사용하여 발생으로 그룹화 된 목록을 반환
다음으로, 질문과 마이클의 대답은 논리 이전 버전을 가지고 @의 쿼리. 우리는 많은 기사가 특정 태그가 없습니다 어떻게 기사 당 일치 얼마나 많은 태그를 계산합니다. 우리는 GROUP BY 필요 그래서하지 a_tags.id에 의해, w_article.id.
이 문제를 해결하려면 :
SELECT COUNT(t.tag) AS ct, a.* -- any column from a allowed ... FROM a_tags t JOIN w_articles2tag a2t ON a2t.tag = t.id JOIN w_article a ON a.id = a2t.article WHERE t.tag IN ('css', 'php') GROUP BY a.id -- ... since grouped by pk column of a LIMIT 9
ID를 가정하면 w_article의 기본 키입니다. 같은 일을하는 동안 그러나,이 형태는 빨라집니다 :
SELECT a.*, ct FROM ( SELECT a2t.article AS id, COUNT(*) AS ct FROM a_tags t JOIN w_articles2tag a2t ON a2t.tag = t.id GROUP BY a.article LIMIT 9 -- LIMIT early - cheaper ) sub JOIN w_article a USING (id); -- attached alias to article in the sub
어제에서이 밀접하게 관련 답변 자세히보기 : 왜 다음은 크게 쿼리 시간을 증가에 가입합니까?
제쳐두고 : 열 이름으로 일반, 비 기술적 인 ID를 사용하는 안티 패턴이다. 두 테이블에서 article_id를 등을 호출합니다. 쉽게 가입하고 당신은 쿼리의 별명 모든 시간을 사용할 필요가 없습니다.
-
==============================
2.당신은 절 "에 의해 그룹의"를 사용하는 경우, 당신은 집계 함수로 분류되지 않은 모든 열을 묶어야합니다. "분 (a.title)은"대신 GROUP BY 목록에 제목을 추가하거나 선택하십시오.
당신은 절 "에 의해 그룹의"를 사용하는 경우, 당신은 집계 함수로 분류되지 않은 모든 열을 묶어야합니다. "분 (a.title)은"대신 GROUP BY 목록에 제목을 추가하거나 선택하십시오.
SELECT COUNT(t.tag), a.title FROM a_tags t JOIN w_articles2tag a2t ON a2t.tag = t.id JOIN w_article a ON a.id = a2t.article WHERE t.tag = 'css' OR t.tag = 'php' GROUP BY t.tag, a.title LIMIT 9
from https://stackoverflow.com/questions/18991625/postgresql-group-by-clause by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] ALL DATETIME ISO 8601 (0) | 2020.06.22 |
---|---|
[SQL] 기록이 존재하지 않는 경우에만 테이블에 SQL 삽입 [중복] (0) | 2020.06.22 |
[SQL] 어떻게 오라클 데이터베이스 열에서 특정 값을 바꾸려면? (0) | 2020.06.22 |
[SQL] WHERE 절 A (+)는 오라클 SQL에서 무엇을 의미하는지에 서명 하는가? [복제] (0) | 2020.06.22 |
[SQL] 오라클 SQL의 CASE .. 언제 표현 (0) | 2020.06.22 |