2017-04-20 4 views
-1

다음 HD 테이블을 hv하고 색상으로 계산하고 그룹화했습니다. 저는 1 학년 학생이며 SQL 초보자입니다. 누구든지 코드를 가르 칠 수 있습니까?SQL 그룹 별 및 개수 기능

SQL-CountColor는 :

SQL-CountColor

내가 시도하는 것 :

Select COLOR, 
    sum(case when Blue = 1 then 1 else 0 end) as Blue_count, 
    sum(case when Red then 1 else 0 end) as Red_count, 
    sum(case when Yellow then 1 else 0 end) as Yellow_count, 
    sum(case when Black then 1 else 0 end) as Black_count, 
    sum(case when Green then 1 else 0 end) as Green_count, 
from TAB_GROUP 
group by COLOR; 
+1

실습 해 보셨습니까? – Milney

+1

이것은 StackOverflow가 작동하는 방식이 아니며, 이것이 SQL (또는 다른 것)을 배우는 방법이 아니라고 말하겠습니다. 이와 같은 질문은 여러 사이트에서 여러 번 요청되었습니다 (SO 포함). 약간의 연구 만하면됩니다. 그렇게 한 후에도 여전히이 문제를 해결할 수 없으면 여기로 돌아와 시도한 내용과 잘못 된 내용을 설명하는 질문을 게시하면 도움을받을 수 있습니다. 키워드 팁 : "그룹화", "카운트", "사례", "피벗"을 검색하면 흥미로운 자료를 찾을 수 있습니다. –

+0

미안 내가 시도한 것을 게시하는 것을 잊어 버렸습니다. – DerrickWong

답변

0

쿼리에 대한 문제는 당신이 유효하지만 호환되지 모두 두 가지 방법을 혼합하고 있다는 것입니다 : 당신이 할 필요가 GROUP BY을 제거하고 데이터 열을 참조 할 수 case을 수정 프로그램입니다.

첫 번째 것은 @LONG이 답변 한 것처럼 case 문을 사용하고 있습니다. 괜찮 으면 사용하지만 group by은 필요하지 않습니다. 이미 각 컬럼마다 다른 조건을 부여하여 "인위적으로"그룹화하고 있습니다.

select sum(case when Blue = 1 then 1 else 0 end) as Blue_count, 
     sum(case when Red then 1 else 0 end) as Red_count, 
     sum(case when Yellow then 1 else 0 end) as Yellow_count, 
     sum(case when Black then 1 else 0 end) as Black_count, 
     sum(case when Green then 1 else 0 end) as Green_count 
from TAB_GROUP 

다른 방법은 group by을 사용하고도 괜찮지 만 만이 당신에게 동일한 결과를 줄 것이다

select COLOR, count(*) as CNT 
from TAB_GROUP 
group by COLOR 

각 그룹에 대해 행을 계산해야합니다 원하는 하나하지만 당신은 그 문법은저기서하고있는 데이터베이스에 따라 달라질 수있는 피벗 기능을 필요 컬럼에 행을 이동하려면

COLOR | CNT 
Blue | 2 
Red | 2 
Yellow | 1 
Black | 1 
Green | 1 

반전 행과 열 지. 이렇게하면이 접근법이 더 복잡해질뿐만 아니라 가능한 값의 수가 증가하는 경우 더욱 다양 해집니다.

0
select  sum(case when color = 'blue' then 1 else 0 end) as 'Blue', 
      sum(case when color = 'red' then 1 else 0 end) as 'Red', 
      sum(case when color = 'yellow' then 1 else 0 end) as 'Yellow', 
      sum(case when color = 'Black' then 1 else 0 end) as 'Black', 
      sum(case when color = 'Green' then 1 else 0 end) as 'Green' 
From Table 
+1

당신이 진짜 서두르는 답을하고있는 것처럼 보입니다. – Rahul

+0

@Rahul은 정말로 내 전화에 실제로 응답하지 않았습니다. – LONG

1

당신은 조금 검색해야, 그것은 매우 일반적인 SQL 문입니다.

select COLOR, count(*) from TAB_GROUP group by COLOR 
0

귀하의 질문은 기본적으로 옳습니다.

select sum(case when color = 'Blue' then 1 else 0 end) as Blue_count, 
     sum(case when color = 'Red' then 1 else 0 end) as Red_count, 
     sum(case when color = 'Yellow' then 1 else 0 end) as Yellow_count, 
     sum(case when color = 'Black' then 1 else 0 end) as Black_count, 
     sum(case when color = 'Green' then 1 else 0 end) as Green_count 
from TAB_GROUP;