name sex age
a male 40
b female 40
c male 20
. . .
. . .
. . .
(40 20 정해져 잇습니다.)
select name, count(age) as father
from people
where people.sex='male' and people.age='40'
group by people.name
select name,count(age) as friend
from people
where people.sex='male' and people.age='20'
group by people.name 이렇게 각각의 쿼리로 하긴햇는데...
이름 성별 father friend :이런 table로 만들고 싶은데 union쓰면 세로로 붙고;; select에서 한꺼번에 하려고해도 group by 때문에 한번
john male 2 1 :읽는거 같아요 어쩌죠
man male 0 3
Comment 4
-
처리짱
2018.12.14 12:22
select name as 이름, sex as 성별, sum(case when people.age='40' then 1 else 0 end) as father,sum(case when people.age='20' then 1 else 0 end) as friendfrom peoplegroup by people.name, sex -
Sol4644
2018.12.14 14:07
아근데 저는 male만 갖고오고싶습니다
설명이 부족햇네요 죄송해여 ㅠ
-
Sol4644
2018.12.14 14:56
아 뒤에 havnig문 붙여서 햇어요 고맙습니다
-
초코렛뜨
2018.12.18 11:53
db 성능 최적화 방안 중 가능한한 having 절 의 사용을 피하는게 좋다고 알고 있습니다." having 절은 group by 에 의한 결과를 제한할 때 사용한다. group by 에 having 절을 사용하였을 경우 group by에 의해서 결과들을 모두 집계한 다음 having 절에 명시한 조건으로 맞지 않는 결과를 버리게 된다. 대부분의 경우 having 절의 필요없이 group by 와 where 절만으로 원하는 결과를 얻을 수 있다 "select name, replace(sex,'m','male') ,count(case when age='40'and sex='m' then 1 else 0 end ) as father , count(case when age='20' and sex ='m' then 1 else 0 end ) as friendfrom test where sex='m' group by name,sex,age