回答:
これはうまくいくはずです:
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*