group by
절에 고유 한 식을 추가하는 경우가 종종 있습니다. 때로는 잘못 되었기 때문에 SQL 또는 잘못된 가정에 오류가 있으며, 그 표현은 정말 고유하지 않습니다.하나의 고유 입력 만 허용하는 집계 함수
내 결과 세트를 조용히, 때로는 매우 미묘하게 확장하지 않고 SQL 오류를 생성하는 경우가 많습니다.
select product_id, unique description from product group by product_id
을하지만, 분명히 나 자신 있음을 구현할 수 없습니다 -하지만 뭔가 거의 간결 일부 데이터베이스에서 사용자 정의 집계로 구현 될 수있다
내가 뭔가를 할 수 싶어요.
고유 한 입력 값만 허용하는 특수 집계는 일반적으로 모든 버전의 SQL에서 유용합니까? 그렇다면 대부분의 데이터베이스에서 그런 것을 구현할 수 있습니까? null
값은 다른 값과 마찬가지로 고려해야합니다. 기본 제공 집계 avg
이 일반적으로 작동하는 방식과 달리. (나는 포스트 그레스와 오라클을 위해 이것을 구현하는 방법으로 해답을 추가했다.)
다음 예는 집계가 어떻게 사용되는지 보여주기위한 것이지만, 어떤 표현식이 유일해야하는지 간단하게 보여주는 간단한 경우이다.
product_id | description
------------+-------------
1 | anvil
2 | brick
3 | clay
4 | door
sale_id | product_id | cost
---------+------------+---------
1 | 1 | £100.00
2 | 1 | £101.00
3 | 1 | £102.00
4 | 2 | £3.00
5 | 2 | £3.00
6 | 2 | £3.00
7 | 3 | £24.00
8 | 3 | £25.00
쿼리 :
> select * from product join sale using (product_id);
product_id | description | sale_id | cost
------------+-------------+---------+---------
1 | anvil | 1 | £100.00
1 | anvil | 2 | £101.00
1 | anvil | 3 | £102.00
2 | brick | 4 | £3.00
2 | brick | 5 | £3.00
2 | brick | 6 | £3.00
3 | clay | 7 | £24.00
3 | clay | 8 | £25.00
> select product_id, description, sum(cost)
from product join sale using (product_id)
group by product_id, description;
product_id | description | sum
------------+-------------+---------
2 | brick | £9.00
1 | anvil | £303.00
3 | clay | £49.00
> select product_id, solo(description), sum(cost)
from product join sale using (product_id)
group by product_id;
product_id | solo | sum
------------+-------+---------
1 | anvil | £303.00
3 | clay | £49.00
2 | brick | £9.00
오류의 경우 :
> select solo(description) from product;
ERROR: This aggregate only allows one unique input
, MySQL의 – XMen
@Rahul에있는 솔로 기능이 있습니다 이 일반적인 SQL 질문 - 나는 익숙하지 않은 데이터베이스 (postgres 및 Oracle) –