2013-03-19 5 views
1

나는 내 주문을 모두 포함하는 "orders"라는 table의 데이터베이스 MySQL을 가지고 있습니다. 난 단지 between 2 and 5 주문을 한 사용자를 위해 사용자별로 그룹화 모든 주문을 좀하고 싶습니다SQL 쿼리 결과의 카운트 발생

id 
userId 
dateOrder 

:이 표에서 내가 좋아하는 다른 분야가있다.

하지만 내 SQL 쿼리가 작동하지 않습니다. 고려해야 할 항목 :

id userId dateOrder 
1 138 2013-03-19 
2 138 2013-03-19 
3 222 2013-03-19 

최소 두 번 주문한 사용자가 만든 주문 만 선택하는 SQL 요청이 필요합니다. 내가 DISTINCT으로, GROUP BY과 노력

userId 138 

하지만,이 작품의 없음 :

이 예를 들어, SQL은 반환해야합니다. 도와 줄수있으세요 ? 감사합니다.

+1

작동하지 않는 쿼리의 예가 있습니까? –

+1

스택 오버플로에 오신 것을 환영합니다! 스택 오버플로에 오신 것을 환영합니다! 해당 태그 (Oracle, SQL Server, MySQL 등)를 추가하여 대상으로 삼고있는 RDBMS를 지정하십시오. 보편적으로 지원되지 않는 언어 나 제품 기능을 이용하는 대답이있을 수 있습니다. 또한 특정 RDBMS로 태그를 지정하면 답변에 더 적합한 사람들로부터 질문을받을 수 있습니다. – Taryn

+0

감사합니다. 끝났다. – yopster

답변

2

당신은 결과를 얻을 수있는 HAVING 절을 사용할 수 있어야합니다 : 당신이 다음 각 주문에 대한 모든 세부 사항을 반환하려면

select userid 
from orders 
group by userid 
having COUNT(*) >= 2 
    and COUNT(*) <= 5 

SQL Fiddle with Demo

를 참조하십시오, 쿼리를 확장 할 수 있습니다 로 :

select o1.id, o1.userid, o1.dateorder 
from orders o1 
where exists (select userid 
       from orders o2 
       where o1.userid = o2.userid 
       group by userid 
       having COUNT(*) >= 2 
        and COUNT(*) <= 5) 

참조 SQL Fiddle with Demo

+0

Fiddle 데모를 어떻게 빨리 만들었는지에 대한 조언을 –

+0

고맙습니다 !!! 그것은 작동합니다 :) – yopster

1

이걸해야한다고 생각합니다 ...

Select * from orders where userid in 
(
Select userid from orders 
group by userid having count(1) between 2 and 5 
) 
+0

고마워요. 좋고 짧은 해결책. – yopster