2014-06-23 2 views
1

데이터베이스 두 개가 있습니다. 하나는 운전자 명단이며 하나는 위반 목록입니다. 각 위반 상태는 노란색 또는 빨간색으로 표시되며 특정 드라이버에있는 노란색 위반 및 빨간색 위반 횟수를 계산해야하며 빨간색 또는 노란색 ASC 또는 DESC로 주문합니다.SQL 중복 값이있는 모든 행을 기본 키로 나누어 쿼리

드라이버 테이블 : AutoID (기본 키 위반 나타난 driverID에 외래 키) 는 employerID

을 클라이언트 ID

위반 테이블 : violationID (기본 키) 상태 driverID (드라이버 테이블 autoID에 외래 키)

나는 아래의 쿼리는 모든 빨간색 또는 노란색 위반을 얻기 위해 실행

SELECT d.autoID, d.clientID, v.status FROM edsp_drivers d, edsp_violations v 
WHERE d.employerID='000000028' AND d.autoID=v.driverID 
AND (v.status = 'yellow' OR v.status='red') 
ORDER BY d.autoID ASC 

결과를 다음과 같이

내가 빨강/노랑 DESC에 의해 드라이버와 ORDER별로 그룹화 모든 노란색 또는 빨간색 경고를 계산하기 만하면됩니다
autoID   clientID status 

000000206 000000015 Yellow 

000000206 000000015 Red 

000000206 000000015 Yellow 

000000206 000000015 Yellow 

000000206 000000015 Yellow 

000000206 000000015 Yellow 

000000206 000000015 Yellow 

000000206 000000015 Yellow 

000000206 000000015 Yellow 

000000206 000000015 Yellow 

000000207 000000015 Yellow 

000000207 000000015 Yellow 

000000367 000000015 Yellow 

000000367 000000015 Yellow 

000000367 000000015 Red 

000000368 000000015 Red 

000000369 000000015 Yellow 

000000369 000000015 Yellow 

000000369 000000015 Red 

000000369 000000015 Yellow 

000000369 000000015 Yellow 

000000369 000000015 Yellow 

000000398 000000015 Yellow 

000000398 000000015 Yellow 

- 나는 끼 었어 곳입니다.

누군가 도움을 받으시겠습니까?

답변

2

는 소리 :

SELECT d.autoID, v.status, COUNT(v.status) 
FROM edsp_drivers d 
LEFT JOIN edsp_violations v 
    ON d.autoID = v.driverID 
    AND (v.status = 'yellow' OR v.status='red') 
WHERE d.employerID = '000000028' 
GROUP BY d.autoID, v.status 
ORDER BY v.status ASC, COUNT(v.status) DESC 
+0

거의 다. 실제로 가장 높은 수의 빨간색 알림을 주문하고 가장 높은 노란색 알림을 주문하고 싶었습니다. – nematoth

+0

방향에 감사드립니다. 나는 다음과 같이 수정했다. SELECT v.driverID edsp_drivers가 가 edsp_violations가 d.autoID = v.driverID AND (v.status = '황색'v.status OR = 'ON V 자 JOIN에서 d 카운트 AS, v.status, COUNT (*) 빨간색 ') WHERE d.employerID ='000000028 ' GROUP BY v.driverID, v.status ORDER BY v.status ASC, 카운트 DESC가 – nematoth

+0

인 경우에만이 문제가 발생합니다. 빨간색 또는 노란색 경고. 어떻게 해결할 수 있을까요? 이 클라이언트 ID에 대해 시스템의 모든 드라이버를 목록 맨 위에 가장 많은 빨간색 경고가있는 드라이버와 함께 나열하려고합니다. – nematoth

2

시도 : 당신은 드라이버와 위반 색상으로 그룹화 할 같은

SELECT d.autoID 
    , SUM(CASE WHEN v.status = 'yellow' THEN 1 ELSE 0 END) as Yellow_Count 
    , SUM(CASE WHEN v.status = 'red' THEN 1 ELSE 0 END) as Red_Count 
FROM edsp_drivers d, edsp_violations v 
WHERE d.employerID='000000028' AND d.autoID=v.driverID 
AND (v.status = 'yellow' OR v.status='red') 
GROUP BY d.autoID 
ORDER BY d.autoID ASC; 
+1

'COUNT' 대신'SUM'이 필요합니다. –

+0

좋은 캐치. 감사합니다 – MinhD

+0

나는 이걸 좋아해.하지만 노란색 경고 0 개와 빨간색 경고 0 개가있는 드라이버를 나열하지 않아. – nematoth

1

당신이 조항에 의해 그룹을 사용하고 기능을 셀 수 아래 건설 쿼리

입니다
SELECT count(*) as count, v.status FROM edsp_drivers d, edsp_violations v 
WHERE d.employerID='000000028' AND d.autoID=v.driverID 
AND (v.status1 = 'yellow' OR v.status1='red') 
group by v.status 
ORDER BY v.status ASC 
관련 문제