2011-01-14 21 views
1

私が書いたコードは、同じ年齢の学生が何人いるかを教えてくれます。SQL - 同じ年齢の学生を表示するには?

AGE  HOWMANY 
---  ------- 
21  3 
30  5 

ありがとう:私がこのような何かを返す

SELECT YEAR(CURRENT DATE-DATEOFBIRTH) AS AGE, COUNT(*) AS HOWMANY 
FROM STUDENTS 
GROUP BY YEAR(CURRENT DATE-DATEOFBIRTH); 

...あまりにも自分の名前をしたいです。私は多分、コード上のどこかを使用して考えていた

TABLE STUDENTS COLUMNS: 
StudentID (primary key), Name(varchar), Firstname(varchar), Dateofbirth(varchar) 

+0

テーブルの構造を教えてください。 –

+0

テーブルスキーマを投稿してもう一度やり直してください –

+0

名前は一意ではないため、1つの別の列に表示することはできません。 – VoodooChild

答えて

1

で同じ行にstundentsの名前を置く関数CONCATを追加するには、既存のSQLは、それがエラーを持っているように見えますが、あなたGROUP_CONCATを使用することができます。

結果のデータセットは、第基づいて、表面上の有益表示されません

+0

GROUP_CONCATを使用するときは注意してください:学生名が多い場合は、 'group_concat_max_len'設定を調整してください。 http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_group_concat_max_len –

1

、あなたのアプリケーションに,によって分割、フェッチする別の列としてGROUP_CONTACT(colname)を追加Eのあなたが学生のリスト、自分の年齢を探している場合を除き、質問、どのように他の多くの学生は同じ年齢である:

SELECT NAME, AGE, HOWMANY 
FROM STUDENTS AS S, 
(SELECT YEAR(CURRENT DATE-DATEOFBIRTH) AS AGE, 
     COUNT(*) AS HOWMANY 
    FROM STUDENTS 
    GROUP BY YEAR(CURRENT DATE-DATEOFBIRTH) 
) AS A 
WHERE YEAR(CURRENT DATE-S.DATEOFBIRTH) = A.AGE 

は基本的にあなたが計算した年齢の数で自己結合を実行します。

+0

すごく面白いですね。どうもありがとう。 – Cristian

0

何を名前を持ち、学生の数は、クエリから取得するエントリの数を見つけることによって見つけることができる

SELECT name FROM students WHERE age = ENTER_AGE_HERE; 

...について。

たとえば、PHPでは、配列の長さを見つけることができます。

もちろん、私の例では、データベースで使用されている名前に変更する必要があります。

+0

hmmm、元のコードでビューを作成してからコードを使用することができます。ありがとう! – Cristian

0
CREATE TABLE #Student 
(
id int identity(1,1), 
age int, 
name varchar(255) 
) 


INSERT INTO #Student S 
VALUES(21,'bob'), 
(21,'tom'), 
(21,'dick'), 
(21,'william'), 
(35,'mark'), 
(35,'anthony') 

SELECT age,COUNT(*),STUFF(
(
    SELECT ',' + name 
    FROM #Student SS 
    WHERE SS.age = S.age 
    FOR XML PATH('') 
), 1, 1, '') 
FROM #Student s 
GROUP BY age 
+0

私は年齢をYEAR(CURRENT DATE-DATEOFBIRTH)に置き換えたり、CTEを使って基本的にそれをうまく処理したり、クエリの年齢として使用したりしていました。 – Andrew

+0

私の投稿を無視するには遅すぎるまでmysqlタグが表示されません – Andrew

関連する問題