テーブルA
年齢,人数
20,15
21,11
22,26
....
30,5
31,88
...
60,5
上記テーブルAからのSQLで下記のデータが欲しいと思っております。
【欲しい結果】
年齢範囲,人数
20~24,50
25~29,33
30~34,199
...
ただし、
select '20~24'as 年齢範囲,count(*)as 人数 from テーブルA where 条件1
union
select '25~29'as 年齢範囲,count(*)as 人数 from テーブルA where 条件2
union
select '30~34'as 年齢範囲,count(*)as 人数 from テーブルA where 条件3
...
というSQLは使いたくないです。(テーブルAの記述が長めなので、同じものを複数記述したくないのです)
また結果が
項目名:20~24,25~29,30~34,...
レコード:50,33,199,...
というのも遠慮したいです。
CASE文やsum、groupを使えば、できそうな気がするのですが、、、
ご教授お願い致します。
No.1
- 回答日時:
こんにちは。
こんな感じで如何でしょうか。
SELECT '20~24', SUM(CASE WHEN 年齢 >= 20 AND 年齢 <= 24 THEN 1 END),
'25~29', SUM(CASE WHEN 年齢 >= 25 AND 年齢 <= 29 THEN 1 END),
'30~34', SUM(CASE WHEN 年齢 >= 30 AND 年齢 <= 34 THEN 1 END)
FROM テーブルA
WHERE 条件1 AND 条件2 AND 条件3
No.2
- 回答日時:
SQL Serverは2000? 2005?
テーブルAのデータ例では、20~22で52人いるが、欲しい結果で20~24が50人とは、何を求めた結果ですか?
>項目名:20~24,25~29,30~34,...
>レコード:50,33,199,...
>というのも遠慮したいです。
母体件数がどのくらいあるのか分かりませんが、性能を重視するなら、上記のような検索の方が、速く行なえるかも知れませんよ?
この回答への補足
お世話になります。
>SQL Serverは2000? 2005?
2000になります。
本件はSQL記述に関する質問であり、バージョンの違いによる問題発生はほぼ無いと考え、割愛致しました。
>テーブルAのデータ例では、20~22で52人いるが、欲しい結果で20~24が50人とは、何を求めた結果ですか?
失礼致しました。人数の記述を間違えました。
テーブルAは年齢毎の人数を表すもので、欲しい結果は年齢範囲に相応した年齢の人数の和になります。
>母体件数がどのくらいあるのか分かりませんが、
今回の母体件数は数百です。
>項目名:20~24,25~29,30~34,...
>レコード:50,33,199,...
>上記のような検索の方が、速く行なえるかも知れませんよ?
UNIONの方法や上記のような方法で、欲しい情報を取得できることはわかっていました。
この「欲しい情報」に対して、私の思いつかない様々なアプローチ方法があるのでは?
と思い、今回質問をあげさせていただきました。
データ件数が少ないこともあり、レスポンスは気にしておりませんでしたが、
「レスポンスを考慮した方法」というのも確かにアプローチ方法のひとつになりますね。
No.3
- 回答日時:
<年齢分布>
ID___区分__年齢___人数
1____1_______20______1
2____1_______21______1
3____2_______25______1
4____3_______34______1
5____3_______31______1
select substring('-----20~24/25~29/30~34', 区分*6, 5) AS 年齢範囲,count(*) as 人数 from 年齢分布 group by 区分;
この SQL文の実行結果は次のようです。
____|年齢範囲|人数|
____|_____________________
__1|20~24____|____2|
__2|25~29____|____1|
__3|30~34____|____2|
と、列[区分]を付加するという解決方法です。
もちろん、
select substring('-----20~24/25~29/30~34', 分布区分*6, 5) AS 年齢範囲,count(*) as 人数 FROM (select *, (年齢 / 5 - 3) as 分布区分 FROM 年齢分布) AS X GROUP BY X.分布区分;
でも同じ結果をえます。
No.4
- 回答日時:
No1です
失礼します。間違いました。
SELECT '20~24', SUM(CASE WHEN 年齢 >= 20 AND 年齢 <= 24 THEN 人数 END),
'25~29', SUM(CASE WHEN 年齢 >= 25 AND 年齢 <= 29 THEN 人数 END),
'30~34', SUM(CASE WHEN 年齢 >= 30 AND 年齢 <= 34 THEN 人数 END)
FROM テーブルA
WHERE 条件1 AND 条件2 AND 条件3
回答ありがとうございます。
この結果だと1レコードに、全ての年齢範囲および人数が載る形になりますね。
こうゆうデータが必要なときもあると思うので参考にさせていただきます。
No.5ベストアンサー
- 回答日時:
select substring('-----20~24/25~29/30~34', 分布区分*6, 5) AS 年齢範囲,Sum(人数) as 総数 FROM (select *, (年齢 / 5 - 3) as 分布区分 FROM 年齢分布) AS X GROUP BY X.分布区分;
なにげなく、質問文にある Count関数を使っていました。
もちろん、Sum関数です。
回答ありがとうございます。確かに「欲しい結果」になりました。
区分とsubstringとは思いもつきませんでした。
区分の考え方は今後のSQLライフに応用できると感じました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESS 一番最新の日付の金額...
-
Accessで在庫管理を
-
2つのテーブルを結合して合計(...
-
複数のテーブルから同じ条件で...
-
SQLで○○の値以外を持っているレ...
-
DB2 業種毎に連番をつけたいの...
-
SQL 件数取得を速くしたい
-
ビューで引数を使いたい
-
「マスタ」と「テーブル」の違...
-
Accessでフィールドを比較した...
-
ACCESS2007 フォーム 「バリア...
-
3つ以上のテーブルをUNIONする...
-
VBAの実行時エラー'2522'について
-
[ BETWEEN ] vs [ >= AND <= ]
-
accessテーブル作成クエリを実...
-
SELECT時の行ロックの必要性に...
-
sqlserverで対象のレコードを削...
-
2つのテーブルから条件に一致...
-
Access のリレーションシップで...
-
AccessでCSVインポートのゼロサ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS 一番最新の日付の金額...
-
ビューで引数を使いたい
-
IFで条件を分岐させてのINSERT...
-
大学でSQLの授業があるのですが...
-
二つの表の項目を比較して値を...
-
Accessで在庫管理を
-
SQLについて質問です。 テーブ...
-
SQL 件数取得を速くしたい
-
複数のテーブルから同じ条件で...
-
空のテーブルの判別
-
INSERT文でサブクエリ
-
SQLの書き方
-
DB2 業種毎に連番をつけたいの...
-
Insert Into Select での重複に...
-
Access関数について クエリで空...
-
SQLで○○の値以外を持っているレ...
-
Sql文のUpdateと副問い合わせで...
-
select into句のトランザクショ...
-
リレーションシップ 全データを...
-
条件が混在しているSQLで値取得
おすすめ情報