2013-04-16 2 views
2

을 입력하고 싶습니다. GROUP BY에 대한 조건을 적용하고 싶습니다.Mysql 그룹 조건별로

조건 city_id != 0이 참이면 목록을 그룹화하십시오. 그렇지 않으면 정상적인 목록.

(
    SELECT city_id, sum(sales) as counts 
    FROM product_sales 
    WHERE city_id !=0  
    GROUP BY city_id 
) 
UNION 
(
    SELECT city_id, sales 
    FROM product_sales 
    WHERE city_id =0  
    ORDER BY sales_id 
) 

누구든지 나를 UNION을 방지하고 단일 쿼리의 목록을 얻을 수 있습니다 :

나는이 그에 대한 쿼리를 사용?

+0

UNION의 문제점은 무엇입니까? – Strawberry

답변

4

하나의 아이디어 : GROUP BYcity_id 0이 아닌 경우 UUID()으로 그룹화 할 때 임의의 고유 값을 에뮬레이션합니다. 따라서 city_id = 0 인 각 행은 그룹화되지 않습니다.

select city_id, sum(sales) 
from product_sales 
group by 
    case when city_id = 0 
    then UUID() 
    else city_id 
    end 

SQL Fiddle.

UUID가이 공간과 시간에 전 세계적으로 고유 한 숫자로 설계되어

. UUID()에 대한 두 번 호출은 서로 연결되지 않은 두 개의 개별 컴퓨터 에서 수행되는 경우에도 서로 다른 두 개의 값을 생성 할 것으로 예상됩니다.

+0

'when city_id = 0'은'when city_id <> 0'이어야합니다. – hjpotter92

+0

@ hjpotter92 : 확실합니까? 나는 그 질문을 다시 읽었으며 나는 그 상태가 옳았다 고 확신한다. –

+0

select city_id, sum (sales) as count FROM product_sales WHERE city_id! = 0 – hjpotter92