2014-10-20 4 views
1

테이블에있는 모든 사용자를 계산하는 출력 테이블을 표시하려고합니다.Mysql은 다른 where 절에 대해 다른 열을 표시합니다.

+-----------+-----------+ 
| user1  | user2  | 
+-----------+-----------+ 
|   5 |   2 | 
+-----------+-----------+ 

난 그냥이 테스트 더미 테이블을 사용하고 있습니다 : 는 기본적으로 I 출력 모양을하고 싶다. 내 쿼리는 다음과 같습니다에만이 같은 출력

(
    select 
     name as user1 
    from 
     users 
    where 
     name = 'root' 
) UNION (
    select 
     name as user2 
    from 
     users 
    where 
     name = 'not_root' 
) 

: 별도의 컬럼의 수를 얻을 수 count의 내부

+-----------+ 
| user1  | 
+-----------+ 
|   5 | 
|   2 | 
+-----------+ 

답변

0

EDITED

접근 방식의 주된 아이디어는 테이블을 하위 쿼리의 서로 다른 두 가상 테이블로 취급한다는 것입니다. 예 : 중첩 된 select 문을 만들 수 있습니다. (select count(*) as c from users where name = 'root') u1 MySql은 테이블을 u1이라는 특정 테이블로 처리하고 하나의 행과 하나의 열을 c으로 지정합니다.

select u1.c as root_cnt, u2.c as not_root_cnt 
from (select count(*) as c from users where name = 'root') u1, 
(select count(*) as c from users where name = 'not_root') u2 

또는 당신은 필드에 직접 중첩 된 선택을 넣을 수 있습니다 하나의 행을 반환하는 선택 문이 또한 경우

은 별도의 서브 쿼리의 이러한 접근 방식의

select (select count(*) as c from users where name = 'root') as root_cnt, (select count(*) as c from users where name = 'not_root') as not_root_cnt 

확실한 단점을 나열합니다. 이러한 단점이없는 case when 구조를 사용하는 방법.

+0

이 실제로 나에게 준 내가 찾고 있던 대답. 어떻게 작동하는지 약간의 설명을 추가해 주시겠습니까? 나는 총 초보자 인 이래 왜 이런 일이 일어나고 있는지 알고 싶다. – clueless

+0

또한'count (u1. *)'가 작동하지 못하고 (구문 오류)'count (u1.name) '와 함께 가야했습니다. – clueless

+0

@DumbAsker 사실 count (u1. *)처럼 보이지 않습니다. 나는 쿼리를 정제하고 동일한 접근 방식을 사용하여 다른 쿼리를 추가합니다. – triclosan

0

당신은 case 문을 사용할 수 있습니다를

select 
    count(case when name = 'root' then 1 end) user1, 
    count(case when name = 'not_root' then 1 end) user2 
from users 
where name in ('root','not_root') 
0

노동 조합은 위에 설명 한 방법으로 두 쿼리의 결과를 결합하지 않습니다 .. 쿼리가 잘못된 것 같다.

union은 두 개 이상의 select 문의 결과를 결합하지만 결합하지는 않습니다.

이 원인으로 조인을 사용할 수 있습니다. 아직도 당신이 5 넣을 수 없을 것 |이 기본적으로 알 수 있듯이 같은 행에 2 - 시도 하나 개의 특정 유형

1

2 개 값을> 사용자 1과 사용자를 가져 오는이

SELECT 
    SUM(CASE WHEN Name = 'root' THEN 1 ELSE 0 END) user1, 
    SUM(CASE WHEN Name = 'not_root' THEN 1 ELSE 0 END) user2 
FROM Users 
관련 문제