• ベストアンサー

年齢別に分類するSQL

従業員名簿があります。 氏名|年齢 これを 18歳から25歳 12人 26歳から30歳 5人 31歳から・・・  のように年齢別にカウントする簡単な方法についてアドバイスください。 #DBはアクセスです。

質問者が選んだベストアンサー

  • ベストアンサー
noname#140971
noname#140971
回答No.3

SELECT count(*) AS 人数 , '18から25' AS 年齢区分   FROM 従業員名簿   WHERE 年齢>=18 And 年齢<=25; ANo.2 の方が回答されているように、このような単一Select文の結果を単一のセットにするには union しかないです。 ですから、単一Select文で実現するには少々工夫が必要です。 従業員名簿: ID___氏名__________年齢 1____鈴木 一郎_______22 2____中村 主水_______26 3____木村 純一_______33 4____山田 太郎_______33 SELECT Count(*) AS 人数 FROM 従業員名簿 GROUP BY ((年齢>=18)*(年齢<=25)+(年齢>=26)*(年齢<=30)*2+(年齢>=31)*(年齢<=40)*3); クエリ1: 人数 _____1 _____1 _____2 これじゃ、年齢区分が判りませんので、次のようにして年齢区分を生成する列を追加しなければなりません。 SELECT CutStr("18~25/26~30/31~40","/",((年齢>=18)*(年齢<=25)+(年齢>=26)*(年齢<=30)*2+(年齢>=31)*(年齢<=40)*3)) AS 年齢区分, Count(*) AS 人数 FROM 従業員名簿 GROUP BY ((年齢>=18)*(年齢<=25)+(年齢>=26)*(年齢<=30)*2+(年齢>=31)*(年齢<=40)*3); クエリ2: 年齢区分___人数 18~25___________1 26~30___________1 31~40___________2 次の CutStr関数を標準モジュールに加えれば、こういう芸当も可能。 Public Function CutStr(ByVal TEXT As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & TEXT, Separator, , 0)   CutStr = strDatas(N * Abs((N <= UBound(strDatas)))) End Function さて、いずれにしろ、従業員名簿に列[年齢区分](=1,2,3)を設ければ済むこと。 このようにクエリにマジックナンバーを埋め込むとメンテナンス上で重大な問題を残すことにも・・・。

その他の回答 (2)

  • t-ka
  • ベストアンサー率28% (14/50)
回答No.2

一例です。 SELECT count(*) as 人数 , '18から25' as 種別 FROM meibo WHERE (((meibo.年齢)>=18 And (meibo.年齢)<=25)) union SELECT count(*) as 人数 , '26から31' as 種別 FROM meibo WHERE (((meibo.年齢)>=26 And (meibo.年齢)<=30)) ;

  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.1

年齢から分類したいグループを算出する式フィールドを設け その式フィールドをグループに指定して集計すればいいのです 年齢がどのように格納されているのかわかりませんが 数値型なら グループ:IIf(年齢 between 18 and 25,"A",IIf(年齢 between 26 and 30,"B","C")) 生年月日などの場合も考え方は同じです

関連するQ&A

  • エクセルでの年齢表示

    エクセルで名簿を作っていますが、昨年作った名簿を今年も利用したいと思っています。 氏名、年齢、住所、電話番号、要綱1、要綱2・・・というものです。 ほとんどは昨年のものそのままですが、年齢だけは変わってきます。 年齢は単純に1をプラスすればよいのですが、方法がわかりませんので、手作業で1を足したものを入力し直しています。良い方法があれば教えてください。

  • 満年齢の出し方。。。

    エクセルを使い、従業員名簿を作っています。 そこで質問なのですが、誕生日から満年齢出す関数等は あるのでしょうか? 詳しい方いらっしゃいましたら教えてください。

  • 年齢別集計

    エクセルの質問です。 数千人分の顧客データを集計して年齢別に人数を数えたいと思います。とある書籍によると、DATEDIF関数を利用して、 =DATEDIF(C1,TODAY(),"Y")&"歳"  ※セルC1に生年月日が入力されています とすれば、年齢は出てきます。 ここで疑問なのは 1.最後の「&"歳"」の記述がないときには年齢が出てこない。単に数値だけを出すにはどうすればよいのか? 2.10~19歳、20~29歳、のように範囲を持たせて人数を集計・カウントするにはどうすればよいのか? です。 よろしくお願いします。

  • エクセルで年齢別

    これから作業で2万件ほどある情報を年齢別に分ける事になりました。 エクセル初心者ではありますが、初級程度は扱えます。 誰がみても見やすい年齢別にわける方法がありましたら 教えてください! お願いします!!!

  • エクセルで年齢別集計をするには

    従業員一覧表が 太郎 男 20 光男 男 35 花子 女 21 彩貴 女 52    。 のようになっており50名それぞれ各年齢に散らばっております ~20歳 名 ~24歳 名 ~29歳 名 と年代別に集計するにはどのようにすればよいでしょうか   。

  • エクセルで項目ごとに新しい別のシートにしたい

    エクセルで名簿を作成しています。 C列に生徒番号、D列に氏名、E列にクラスがAからFまでランダムに入っています。 この名簿を新しいファイルに、クラスごとに別のシートにしたいです。 できればシート名も「A」「B」となっていれば助かります。 A,B列にもデータが入っていますが、今回は生徒番号、氏名、クラスのみの ファイルにしたいです。 良い方法を教えてください。よろしくお願いします。

  • SQL文について <と>の意味

    SQL文について <と>の意味 とある問題で。 問(1) 次のSQL文によって、以下の学生名簿の表から抽出されるものはなんですか。 該当する記号を書いてください。 -------------------------------------------------------------------- SELECT 氏名 FROM 学生名簿 WHERE 学科='産業経営' AND 年齢>20 氏名 学科 年齢 上田 泰 経済 22 太田 裕子 公共金融経済 18 鍵谷 俊文 産業経営 19 佐藤 由理子 産業経営 21 山本 貞真 経済 20 a 上田 泰 b 鍵谷 俊文,佐藤 由理子 c 佐藤 由理子 d 上田 泰 e 上田 泰,佐藤 由理子 ---------------------------------------------------------------------- (2): (1)の問題の学生名簿の表から、 下のSQL文を実行したときに得られる表を書いて下さい。 SELECT 氏名,学科 FROM 学生名簿 WHERE 年齢<20 ---------------------------------------------------------------------- それぞれに 1)年齢>20 2)年齢<20 と書いてありますが 1)の場合は、20歳以上という意味なのか、それとも「20歳」は含まず「21歳から」。 2)の場合は、20歳以下という意味なのか、それとも「20歳」は含まず「19歳から」。なのかが分かりません。 この場合だと(1)の答えはc 佐藤 由理子で合っているのでしょうか? それと(2)の答えは 太田 裕子 公共金融経済 18 鍵谷 俊文 産業経営 19 山本 貞真 経済 20 と書き表せばいいのでしょうか? 宜しくお願い致します。

  • ACCESSのSQLで・・・

    ACCESS2003を使用しています。 氏名の苗字と名前の間にある空白をSQLで取り除きたいのですが、どのようにしたらいいのでしょうか? 教えて下さい。 そして空白を取り除いた後、空白なしの氏名と住所の入った別のテーブルと結合したいのです。 これも合わせて教えて下さい。 よろしくお願いします。

  • アクセスで、生年月日なしで年齢計算できませんか?

    アクセス2000初心者です。 名簿で年齢を入力しているのですが、時間経過とともに年齢も更新されるように設定できないでしょうか。 検索して色々調べてはみましたが、「生年月日」の入力が必要なケースしかみつけられませんでした。 全員分の生年月日入手が難しいので、「現在年齢」から年齢を更新できる方法はないでしょうか。 詳しい方いらっしゃったらよろしくおねがいいたします。

  • SQL文が実行できません

    単純なSQLの実行命令なのですが、 下記のエラーメッセージが出て実行できません。 解消方法をご存知の方がいらっしゃいましたら、 教えてください。よろしくお願いします。 エラーメッセージ: Microsoft OLE DB Provider for ODBC Drivers (0x80040E10) [Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。1 を指定してください。 /x_db/1.asp, line 12 (Set RS = db.Execute(SQL)のラインがエラーです) ソースです。 <% Set db = Server.CreateObject"ADODB.Connection") db.Open "x_db" SQL = "select * from x_db where w_xpc ='" & Request.Form("F01") &"'" Set RS = db.Execute(SQL) Response.Write(RS.Fields("氏名")) RS.close set RS = nothing db.close set db = nothing %> 環境:WIN200server IIS5.0 access97