2014-07-09 5 views
0

C# 대신 sql을 사용하여 목록을 생성하는 더 나은 방법을 찾고 있습니다. 내가 필요로하는항목 당 일정한 양의 결과를 가져 오는 SQL 쿼리

NUMBER   CITY  STATE 
555-555-5555 New York NY 
111-111-1111 Los Angeles CA 
222-222-2222 Houston  TX 
333-333-3333 Miami  FL 

: 잘못

내가 수 /시/

예 (그러나 숫자의 수백만)로, 테이블라는 PHONENUMBERS을 말해봐 내가 뭘 충분히 간단한 보인다 각 상태에서 10 개의 전화 번호를 반환하는 쿼리

지금 당장 저는 50 개 주에 대한 쿼리를 개별적으로 실행하고 데이터 집합에서 결합하지만 큰 데이터베이스이므로 속도가 느립니다. 간단한 방법은 그냥 데이터를 뒤로 당겨 내가 필요.

+0

어떤 DBMS를 사용하고 있습니까? –

+0

해결책 유형으로 dbms 유형을 유형별로 표시하십시오. –

답변

0

아래 쿼리는 MySQL은 오라클과 SQL Server에 대한 작동하지만 안 : 특정 필드를 기준으로 정렬 된 처음 10 개 행을 필요로하는 경우, 당신이 할 수있는 order by를 조정할있을 것이라는 점을

with cte as 
(select number, city, state, 
row_number() over (partition by state order by state) rn 
from yourtable) 

select number,city,state 
from cte 
where rn <= 10 

주 귀하의 필요에 부응하십시오.

0

는하지만, MSSQL 다릅니다 :

with cteByStateas (
    select row_number() over (partition by STATE order by CITY) as RowNo, 
      number, 
      city, 
      state 
) 
select * 
    from cteByState 
where RowNo <= 10 

들이 무작위로 할 필요가있는 경우 당신은 당신이 원하는 처음 10 개 번호를 지정하거나 didnt가 있습니다

mysql을 위해, 거기는 조금 완료 다른 변수 사용

0

UNION ALL 절을 사용하면됩니다. 이게 뭐야 : -

(SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'NY' ORDER BY CITY LIMIT 10) 
UNION ALL 
(SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'CA' ORDER BY CITY LIMIT 10) 
UNION ALL 
(SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'TX' ORDER BY CITY LIMIT 10) 
UNION ALL 
(SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'FL' ORDER BY CITY LIMIT 10) 

희망이 도움이 될 것입니다.

+0

OP는 이미이 방법을 사용하고 있으며 다른 방법을 원합니다. '지금은 50 개 주 전체에 대해 쿼리를 실행 한 다음 데이터 세트에서 조합하는 것입니다.' –

+0

사용자가 자신의 쿼리를 입력하지 않은 이유는 바로 그에게 이해하기가 훨씬 쉬운 솔루션을 제공하는 이유입니다. –