마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

sqlite의 inner join이 이렇게 하는거 아닌가요?

0 추천
--------------------------
| id | date       | type |
--------------------------
| 1  | 2015-04-10 | a    |
| 2  | 2015-04-11 | b    |
| 3  | 2015-04-13 | c    |
| 4  | 2015-04-09 | a    |
| 5  | 2015-04-10 | a    |

이런 식의 정보가 들어있는 테이블이 있고, 

 

select count(*) from food 
where date = '2015-04-10' and type = 'a' 
group by date, type

select count(*) from food 
where date = '2015-04-10' and type = 'b' 
group by date, type

select count(*) from food 
where date = '2015-04-10' and type = 'c' 
group by date, type

이 세 개의 쿼리를 한 번에 해결하고 싶어요. (왠지 그게 더 좋아보이기도 하고요)

 

 

select count(m1.type) as 'a', 
       count(m2.type) as 'b', 
       count(m3.tpye) as 'c'
from food as t
inner join food as m1 on m1.id = t.id
inner join food as m2 on m2.id = t.id
inner join food as m3 on m3.id = t.id
where t.date = '2015-04-10'
group by t.date, t.type;

검색해보고 대충 이렇게까지는 만들었는데, 제대로 만들어졌다면 row가 1개 혹은 0개가 나와야하는데, 이렇게하니까 3개가 나오네요 ;;;

어디가 잘못 된걸까요?

 

그냥 쿼리 3개를 날릴까요?

쎄미 (162,410 포인트) 님이 2015년 4월 17일 질문

2개의 답변

0 추천
 
채택된 답변
select

count(case when type = "a" then 1 end) as a,

count(case when type = "b" then1 end) as b,

count(case when type = "c" then1 end) as c  

from food

where date= "2015-04-10"

해보세요.
띠깔라1 (4,200 포인트) 님이 2015년 4월 17일 답변
쎄미님이 2015년 4월 17일 채택됨
우와 고맙습니다. 이런 구문은 처음 봐요
0 추천
?? 테이블이 하난데 join 이 왜 필요하나요?

inner join 은 교집합이라고 생각하시면 됩니다.

원하는 결과가 어떤것인지부터 정의하시는게 맞는 것 같네요
mamondebaltob (32,750 포인트) 님이 2015년 4월 17일 답변
같은 테이블의 같은 날짜의 type이 a인것의 갯수, b인것의 갯수, c인것의 갯수가 필요해요
select food.type, count(*) from food
where date='2015-04-10'
group by food.date, food.type

이거 원하시는건가요?
이러면 row가 3개가 나오지 않나요?
?? a 인 것의 개수, b 인것의 갯수, c인 것의 갯수
3개 필요한거 아닌가요?
네. 근데 그냥 row 하나로 처리하고 싶어서요...
...