답변:
이것은 작동해야합니다 :
SELECT age, count(age)
FROM Students
GROUP by age
ID가 필요한 경우 위와 같이 하위 쿼리로 위를 포함 할 수 있습니다.
SELECT S.id, S.age, C.cnt
FROM Students S
INNER JOIN (SELECT age, count(age) as cnt
FROM Students
GROUP BY age) C ON S.age = C.age
Oracle을 사용하는 경우 분석 기능이 트릭을 수행합니다. 다음과 같이 보입니다 :
select id, age, count(*) over (partition by age) from students;
Oracle을 사용하지 않는 경우 카운트에 다시 참여해야합니다.
select a.id, a.age, b.age_count
from students a
join (select age, count(*) as age_count
from students
group by age) b
on a.age = b.age
다른 해결책이 있습니다. 이것은 매우 간단한 구문을 사용합니다. 허용 된 솔루션의 첫 번째 예는 이전 버전의 Microsoft SQL (예 : 2000)에서 작동하지 않았습니다.
SELECT age, count(*)
FROM Students
GROUP by age
ORDER BY age
"연령"열의 데이터가 유사한 레코드를 갖는 경우 (예 : 많은 사람이 25 세, 다른 많은 사람이 32 세 등) 각 학생에게 올바른 수를 맞추는 데 혼란을 초래합니다. 이를 피하기 위해 학생 ID 테이블에도 참여했습니다.
SELECT S.id, S.age, C.cnt
FROM Students S
INNER JOIN (SELECT id, age, count(age) as cnt FROM Students GROUP BY student,age)
C ON S.age = C.age *AND S.id = C.id*