[SQL] GROUP BY / SQL의 집계 함수 혼란
SQLGROUP BY / SQL의 집계 함수 혼란
나는 약간의 도움이 뭔가를 교정해야합니다, 나는 그것을 아주 쉬운 쉬운 질문 알고 있지만 약간 SQL에서 저를 혼란 그것의 무언가.
이 SQL 쿼리는 오라클의 오류 '표현에 의해 아닌 GROUP'이 발생합니다. 내가 그 튜플의 속성에 의해 I 그룹 한 번, 내가 할 수있는 더 이상 액세스 다른 속성을 모르는 나는, 왜 이해합니다.
SELECT *
FROM order_details
GROUP BY order_no
그러나 이것은 하나의 작업을 수행
SELECT SUM(order_price)
FROM order_details
GROUP BY order_no
그냥 만들어 I 그룹 일단 튜플이 order_no 시리얼에 따라, 나는 아직도 그룹의 각 튜플의 order_price 속성에 접근 할 수있는 각각의 주문 ORDER_DETAILS에 여러 튜플이 있다고 가정하면 ....이 내 이해를 콘크리트, 하지만 집계 함수를 사용하고 계십니까?
즉, SELECT 절에 사용되는 집계 함수 경우는 '숨겨진'속성을 볼 수있는 그룹으로 드릴 다운 할 수 있습니다, 단순히 'order_no 시리얼 SELECT'사용하는 경우 오류가 발생합니다?
해결법
-
==============================
1.표준 SQL (하지만 MySQL은)에서, 당신은 GROUP BY를 사용할 때, 당신은 GROUP BY 절에 집계되지 않은 모든 결과 열을 나열해야합니다. ORDER_DETAILS 6 열이있는 경우에 따라서, 당신은 (이름 - 당신이 조항에 의해 GROUP BY에서 * 또는 ORDER를 사용할 수 없습니다) 모든 6 열을 나열해야 GROUP BY 절에.
표준 SQL (하지만 MySQL은)에서, 당신은 GROUP BY를 사용할 때, 당신은 GROUP BY 절에 집계되지 않은 모든 결과 열을 나열해야합니다. ORDER_DETAILS 6 열이있는 경우에 따라서, 당신은 (이름 - 당신이 조항에 의해 GROUP BY에서 * 또는 ORDER를 사용할 수 없습니다) 모든 6 열을 나열해야 GROUP BY 절에.
당신은 또한 할 수 있습니다 :
SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no;
모든 비 집계 열이 GROUP BY 절에 나열되어 있기 때문 작동합니다.
당신이 뭔가를 할 수 있습니다 :
SELECT order_no, order_price, MAX(order_item) FROM order_details GROUP BY order_no, order_price;
이 쿼리는 정말 의미가없는 (또는 대부분의 아마 의미가 없다)하지만 '작업'것이다. 그것은 각각 별도의 주문 번호와 주문 가격 조합을 나열합니다, 그 가격과 관련된 최대 순서 항목 (번호)를 제공 할 것입니다. 순서에있는 모든 항목이 별개의 가격이있는 경우, 당신은 하나 개의 행 각각의 그룹이 될 겁니다. 순서대로 몇 가지 항목이 같은 가격이있는 경우 OTOH, (£ 0.99 각을 말한다) 다음 그룹은 그 함께하고 그 가격에 최대 주문 항목 수를 반환. (I 테이블을 가정하고있어 순서의 첫 번째 항목이 두 번째 항목 등 2, order_item 1 = 갖는다 (order_no 시리얼, order_item)의 기본 키가)
-
==============================
2.
SELECT * FROM order_details GROUP BY order_no
위의 질의에서 당신은 때문에이 같은가없는 그룹을 오류를 던지는 것을의 모든 열을 선택하는 .. 방지 할 수있는 방법은 select 문에 모든 열이 GROUP BY 절에 있어야합니다 중 모든 열을 언급해야한다는 ..
SELECT * FROM order_details GROUP BY order_no,order_details,etc
등이 ORDER_DETAILS 테이블의 모든 열을 의미한다.
-
==============================
3.GROUP BY 절을 사용하려면 집계 함수에서 열 절에 의해하지만 그룹에서 select 문에서 모든 열을 언급해야한다.
GROUP BY 절을 사용하려면 집계 함수에서 열 절에 의해하지만 그룹에서 select 문에서 모든 열을 언급해야한다.
당신은 당신이에 의한 파티션으로 그룹에 하나의 포트를 사용할 수 있습니다 조항으로 파티션을 사용하여 대신 그룹의이 작업을 수행 할 수 있습니다.
당신은 또한 1 파티션으로 그것을 만들 수 있습니다
-
==============================
4.이 문제를 방지하기 위해 공통 테이블 식 (CTE)를 사용합니다.
이 문제를 방지하기 위해 공통 테이블 식 (CTE)를 사용합니다.
다수의 열팽창 계수는 어쩌면 도움이 ... 내가 사용했을 경우를 붙여 편리 올
with ranked_cte1 as ( select r.mov_id,DENSE_RANK() over ( order by r.rev_stars desc )as rankked from ratings r ), ranked_cte2 as ( select * from movie where mov_id=(select mov_id from ranked_cte1 where rankked=7 ) ) select * from ranked_cte2 select * from movie where mov_id=902
from https://stackoverflow.com/questions/4611897/group-by-aggregate-function-confusion-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 여러 번 매개 변수 바인딩 사용하십시오 (0) | 2020.03.26 |
---|---|
[SQL] IS NULL = NULL과의 차이가 있습니까 (0) | 2020.03.26 |
[SQL] MySQL의 : 절 제한의 FROM에서 하위 쿼리와보기 (0) | 2020.03.26 |
[SQL] SQL 서버 - 어떻게 저장 프로 시저가 완료 될 때까지 테이블을 잠급니다 (0) | 2020.03.26 |
[SQL] SQL에서 증가 날짜의 결과 세트를 생성 (0) | 2020.03.26 |