2011-02-06 3 views
0

다른 필드를 이름으로 사용하여 하나의 테이블에서 레코드를 가져옵니다. 나는 단지 10 개의 레코드 만 원한다. 그 중 9 개의 레코드가 나에게 필드와 카운트를 제공합니다. 하지만 난 10 레코드를 "기타"로 표시하고 나머지 필드는 카운트로 표시하려고합니다. 이것은 레코드를 감싸는 것과 같습니다.첫 번째 9 개의 레코드를 가져오고 mysql에서 "기타"와 같은 레코드를 하나 더 만들려고합니다.

아래 내용은 표 내용입니다.

emp_id | 지정

1 | 소프트웨어 Engg.

2 | 소프트웨어 Engg.

3 | 프로젝트 관리자

10 이상을 지정하십시오.

는 그리고 MySQL의 DB에 대한 SQL 쿼리를 만들 수있는 방법이 있나요

Software Engineers 20 
Project Manager  5 
.... 
.... 
.... 
Others 50 

로 처음 10 개 기록을 보여주고 싶다. 그래서 그것은 "기타"에 대한 레코드 카운트를 합산하는 어플리케이션 레벨에서 빠르며 시간을 절약 할 것입니다. 또는 효과적인 방법으로 가능한 방법을 제안하십시오.

+0

'SELECT .. GROUP BY' 표준을 수행 한 다음'UNION SELECT ... EXISTS가없는 곳 '을 수행 할 수 있습니까? – vol7ron

답변

1

이 시도 :

SELECT IF(rowNum <= 9, designation, 'Other') designation, SUM(cnt) 
FROM (SELECT designation, COUNT(*) cnt, (@row := @row + 1) rowNum 
    FROM contents, (SELECT @row := 0) dm 
    GROUP BY designation 
    ORDER BY designation 
) d 
GROUP BY IF(rowNum <= 9, designation, 'Other') 

변경 GROUP BY하고 9 보여 결정할 그러나 ORDER BY.

+0

.. "모든 파생 테이블에 고유 한 별칭이 있어야합니다"라는 오류가 발생합니다. – Kammy

+0

@ kamlesh-bhure 업데이트 됨. –

+0

... 죄송합니다. 예. 작동합니다 .. 위 쿼리의 논리를 공유 할 수 있습니까? 이 쿼리는 10000 개의 레코드에서 빠르게 작동합니까? – Kammy

1

당신은 쿼리에서 LIMIT 절을 무시한 행의 총수를 계산하도록 MySQL에 지시 할 수있는 SQL_CALC_FOUND_ROWS 옵션을 사용할 수 있습니다. 행 수를 검색하기 위해서는 여전히 두 번째 쿼리를 실행해야하지만 단순 쿼리 일뿐 아니라 데이터를 검색 한 쿼리만큼 복잡하지는 않습니다.

사용법이 매우 간단합니다. 당신이 메인 쿼리에서 SQL_CALC_FOUND_ROWS 옵션을 SELECT 뒤에 추가해야하고 두 번째 쿼리에서 총 행 수를 얻기 위해 FOUND_ROWS() 함수를 사용해야합니다. 쿼리는 다음과 같이 보일 것이다 :

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10; 

SELECT FOUND_ROWS(); 
+0

감사합니다 ... 작동합니다 ... LIMIT 9를 제공하여 직원 수를 늘리는 데 사용할 수 있습니다. 발견 된 행은 없습니다. – Kammy

+0

이것이 내 문제를 완전히 해결하지 못합니다. becoz 내가 쓰기 쿼리 선택 지정, count (distinct emp_id) from emp_design Limit 9, $ num_rows; 하지만 그것은 제게 기록을줍니다. – Kammy

관련 문제