2014-10-16 2 views
0

예를 들어 다른 나라에서 온 과일을 가지고 다른 브랜드를 가지고 있습니다 (국가 및 브랜드는 독립성을 나타냅니다).MYSQL은 하나의 명령을 사용하여 두 개의 GROUP BY 결과를 결합합니다.

+-------+-------+---------+-------+ 
| name | stock | Country | brand | 
+-------+-------+---------+-------+ 
| apple | 40 | USA  | Sun | 
| apple | 38 | UK  | Sun | 
| apple | 33 | CN  | Green | 
| apple | 29 | UK  | Air | 
| apple | 15 | USA  | Green | 
+-------+-------+---------+-------+ 

우리는이 명령을 사용하여 일반적으로 경우

SELECT name, Country, sum(stock) 
FROM table 
GROUP BY Country 

이 .... 다음과 같은 결과를

+-------+---------+------------+ 
| name | Country | sum(stock) | 
+-------+---------+------------+ 
| apple | CN  |   33 | 
| apple | UK  |   67 | 
| apple | USA  |   55 | 
+-------+---------+------------+ 

을 제공하지만 내가 원하는 것은 이것이다 할 것이다

+-------+----------+-------+ 
| name | category | stock | 
+-------+----------+-------+ 
| apple | USA  | 55 | 
| apple | UK  | 67 | 
| apple | CN  | 33 | 
| apple | Sun  | 78 | 
| apple | Green | 48 | 
| apple | Air  | 29 | 
+-------+----------+-------+ 

일부 결과의 경우 명령은 한 단계 명령이어야하며, 이는 하나의 명령에 대해서만 한 번의 클릭으로 위의 결과를 직접 출력 할 수 있어야한다는 것을 의미합니다.

답변

0

을 밖으로 난 하위 쿼리와 함께이 일을 제안 :

select name, category, sum(stock) 
from (select name, brand as category, stock, 1 as ordering 
     from table 
     union all 
     select name, country, stock, 0 ordering 
     from table 
    ) t 
group by name, category, ordering 
order by ordering, name; 

참고 ordering 컬럼의 사용은 결과가 원하는 결과에서와 동일한 순서로 표시되도록 할 수 있습니다. 또한 brandcountry이 같은 이름 인 경우 두 행을 유지합니다. 조합하려는 경우 group by에서 ordering을 삭제할 수 있습니다.

0

노동 조합에 읽거나 난 당신이 다음이 저장 사용하여 수행 할 수 있습니다 함께 을 두 개의 임시 테이블을 조인

SELECT name, Country as category, sum(stock) 
into #temptable1 FROM table 
GROUP BY Country 

SELECT name, brand as category, sum(stock) 
into #temptable2 FROM table 
GROUP BY brand 

을 할 필요가 있다고 생각

가입 왼쪽 시도 절차

또는 단순히 임시 테이블을

SELECT name, Country as category, sum(stock) 
into #temptable1 FROM table 
GROUP BY Country 
UNION 
SELECT name, brand as category, sum(stock) 
into #temptable2 FROM table 
GROUP BY brand 
+1

첫 번째 두 개의 쿼리에서'INTO # temptableX'을 제거하고'UNION'을 함께 제거 할 수도 있습니다 : SELECT 이름, 국가 별 카테고리, 합계 (주식) FROM 테이블 GROUP BY 국가 UNION SELECT 이름, 합계 (주식) FROM table GROUP BY 브랜드에서 – myersjustinc

+0

좋은 지적은 아래에 추가 –

관련 문제