2017-12-27 11 views
1

특정 sku가있는 상점 (상점 1-10)의 갯수를 계산하려고합니다. 내가 오류가 계속SQL에서 카운트 중첩

SELECT distinct COUNT(*) as total_store 
FROM(

    select distinct st.* 
    from (select st.* 
     from store_table st 
)st 

WHERE st.store between 1 and 10 
AND st.sku = 10101 
GROUP BY st.store 
HAVING COUNT(*) >= 1 
)a; 

:

ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression"

을 나는 확실하지 않다 왜 그렇게 말하고 여기 내 코드는?

답변

3

데이터를 선택하지 않고 st.store별로 그룹화하면 오류가 발생합니다. SELECT 또는 GROUP BY 절에서 원하는 모든 비 집계는 모두에 나타나야합니다.

이렇게 말하면 당신은 이것을 너무 복잡하게 만듭니다. 우리가 처음에 시작하면 당신은 상점에서 뭔가를 원하는 : 지금 당신은 독특한 상점이 원하는 특정 SKU

select * from stores where store between 1 and 10 and sku = 10101 

select * from stores 

특정 저장

select * from stores where store between 1 and 10 

select distinct store from stores where store between 1 and 10 and sku = 10101 

마지막으로 y 고유 상점 수를 원합니다.

select count(distinct store) 
    from stores 
where store between 1 and 10 
    and sku = 10101 

논리 레이어가 아닌 세트 레이어에서 쿼리를 작성하는 것처럼 보입니다. 쿼리는 생성 된 표현식에 의존하는 연산을 추가해야하는 경우에만 세트 (인라인 뷰 등)를 만들어야하는 조건 집합입니다. 쿼리를 작성할 때 추가 논리를 계층화하는 데 중점을 둡니다. 결과 쿼리가 당신이 그것을 어떻게 말할 것인지와 비교할 때 너무 복잡해 보인다면 가능성이 있습니다. 나는 실제로 STORE에서 고유 것을 가정하려는 테이블 이름 STORES을 바탕으로


(이것은 기본 키 때문에 null이 아닌 것을) 그래서 당신은 추가 정렬을 수행 할 필요가 없습니다 당신은 당신이에 의해 그룹과 * 사용하고 하나 개의 필드 수없는 선택 필드를 정의해야합니다 그때까지 그룹을 사용할 때 SQL에서

select count(*) 
    from stores 
where store between 1 and 10 
    and sku = 10101 
0

이 독특한 확인합니다. 예 *를 사용할 수 있습니다. 그룹별로 모든 필드를 선언해야합니다. 또한 집계 함수가있는 모든 필드를 넣어야하지만 그룹화 된 필드가있는 집계는 집계를 사용할 수 없습니다.