2013-04-19 4 views
1

다음과 같이 MySQL에 하나의 테이블이 있습니다.MySql에서 계산 쿼리를 제안 - 적절한 출력을 얻지 못했습니다.

State marketId 
CA  Ind 
CO  Ind 
CA  Grp 
CA  Grp 

데이터를 개수 및 총 개수 (아래에 나와 있음)로 선택하려고합니다.

State marketId Count totalCountInd 
    CA  Ind 1  2    
    CO  Ind 1 

현재 아래의 쿼리를 사용하고 있습니다. 그것은 올바른 결과를주지 못합니다. 당신이 원하는 경우

State marketid totalCount totalCountInd 
CA  Ind   1   2 
CO  Ind   1   2 
+0

'totalCountInd'는 모든 주를 통과하는 모든 인도 시장의 총 수라고 생각합니까? 그렇다면, 왜 당신이 그것을'CA' 주 옆에 나타나길 원합니까? 그렇지 않다면 무엇을 표현하고 싶습니까? –

+0

[mysql에 백작 쿼리에 대한 선택 쿼리] (http://stackoverflow.com/questions/16074729/select-query-for-count-in-mysql) – hims056

답변

0

이 차이가

SELECT State, marketid, COUNT(1) as totalCount, 
(
    SELECT COUNT(1) FROM BatchReport 
    WHERE marketid = bp.marketid 
) AS totalCountInd 
FROM BatchReport bp 
WHERE marketid = 'Ind' 
GROUP BY State, marketid 

결과이 같이있는 totalCountInd을 반복 할 것이다 당신이 을 원하는 당신에게 일에 가까운 결과를 줄 것이다 totalCOuntInd는 모든 주 (州)의 수를 유지합니다. "Ind"는 주별로 그룹화 할 때 제안 된 형식으로 얻을 수 없습니다.

marketId State Count 
    Ind  CA 1     
    Ind  CO 1 
    Ind  NULL 2 
    NULL NULL 2 

이것은 또한 의미가있는 유일한 방법입니다 :

select state,marketId,count(*) as count 
from BatchReport 
where marketId='ind' 
group by marketId, state with ROLLUP; 

이 당신이 모든 그룹 컬럼의 결과를 arollup과 같이 줄 것이다 :

당신이 할 수있는 것은 사용 롤업입니다 .

+0

helooo ... totalCountInd 열 값이 고유 한 값을 원한다. 이렇게 ... 주 시장 총수 총액 계산서 CA Ind 1 2 CO Ind 1 –

0

:

select state,marketId,count(*),sum(CASE marketID WHEN 'ind' THEN 1 ELSE 0 END) AS totalCountInd from BatchReport where marketId='ind' group by state,marketId; 
+-------+----------+----------+---------------+ 
| state | marketId | count(*) | totalCountInd | 
+-------+----------+----------+---------------+ 
| CA | in  |  1 |    | 
| CO | in  |  1 |    | 
|+-------+----------+----------+---------------+ 
관련 문제