이 테이블에서 전체 행수와 fstate가 AS요망인 행 수를 구해오는 것입니다. GROUP By charge_uid로 가져오는데요
쿼리를 이렇게 해서 가져옵니다.
SELECT `User`.place,
COUNT( DISTINCT `Data`.data_id ) AS `used`,
SUM( DISTINCT data_id AND if( `Data`.fstate = 'AS요망', 1, 0 ) ) AS `as`,
SUM( if( `Data`.state = '승인', 1, 0 ) ) AS `accepted`
FROM `users` AS `User`
LEFT JOIN `Data` ON `Data`.charge_id = `User`.uid GROUP BY `User`.place
ORDER BY `User`.place ASC, `User`.role DESC
제가 의도한 as 컬럼의 숫자는 2 입니다. data_id가 중복되지 않고 AS요망인 것이 두개가 나오는 것입니다.
그런데 저렇게 하면 1밖에 안나옵니다. AS요망으로 1 또는 0 이 되는 값이 중복안되는거 같습니다. ㅠ_ㅠ
data_id가 중복되지 않고 AS요망인 것을 뽑을 수 있는 방법이 있을까요?
제가 생각하는 방법은 서브쿼리를 이용하는 것입니다.
SELECT `User`.place,
COUNT( DISTINCT `Data`.data_id ) AS `used`,
(SELECT COUNT(*) FROM works WHERE fstate = 'AS요망' ) AS `as`,
SUM( if( `Data`.state = '승인', 1, 0 ) ) AS `accepted`
FROM `users` AS `User`
LEFT JOIN `Data` ON `Data`.charge_id = `User`.uid GROUP BY `User`.place
ORDER BY `User`.place ASC, `User`.role DESC
혹시 더 간단한 방법이 있을까요?
|