
カウント結果を1レコードの中で横に並べたい
以下のテーブルを、
test_table
id group name
1 100 テスト1
2 100 テスト1
3 100 テスト1
4 200 テスト1
5 200 テスト1
6 200 テスト2
7 200 テスト2
8 200 テスト2
9 200 テスト2
nameごとのカウント、更に100だけのカウント、200だけのカウントといったように、
以下のように横に並べることは可能でしょうか?
name 合計 100計 200計
テスト1 5 3 2
テスト2 4 0 4
まず、nameごとの合計を取得するクエリを作って、
それに、100計列、200計列の部分をサブクエリでもってきたのですが、
これで動くには動くんですが、このやり方しかないものでしょうか。
ご教示おねがいします。
SELECT t.name, COUNT(*) as '合計',
(SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '100' ) as '100計',
(SELECT COUNT(*) FROM test_table as t1 WHERE t1.name = t.name AND t1.group = '200' ) as '200計'
FROM test_table as t
WHERE 1
GROUP BY t.name;
No.2ベストアンサー
- 回答日時:
groupのカラムに入る値が分かっているのであれば
case文を使うとパフォーマンスにも優れると思います。
case文を使うと条件によって出力する値を変える事ができます。
SELECT
name,
COUNT(*) AS total,
SUM(CASE
WHEN group='100' THEN 1
ELSE 0
END) AS count_100,
SUM(CASE
WHEN group='200' THEN 1
ELSE 0
END) AS count_200
FROM
test_table
GROUP BY
name;
(※上記のSQLはインデントを付けるために全角のスペースを使っています。コピペをする際は削除して下さい。)
参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
1万件レコードがあった時に10秒くらいかかってたのが0.1秒になりました!
こういった方法というか発送もあるんですね。ありがとうございます!
No.1
- 回答日時:
ピボットテーブルを使うやり方があります。
create temporary table temp (num int,`合計` int,`100計` int,`200計` int);
insert into temp values(100,1,1,0),(200,1,0,1);
select name,sum(合計*c) as 合計,sum(100計*c) as 100計,sum(200計*c) as 200計
from temp inner join
(select `group`,name,count(*) as c from test_table group by `group`,name) as sub
on `group`=num group by name;
※groupは予約語です、なるべく使うのを避けてください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLで変数やループ、上位3名...
-
MySQLで MAX()とGROUP BYを使う...
-
使うべきでない文字。
-
重複をせずに2つのフィールドを...
-
Oracleの監視。
-
JOINでの結果取得 サブクエリ...
-
LIKE述語/SQLとPHPを使った検...
-
【初歩】ラジオボタンをつかっ...
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
Oracleでの文字列連結サイズの上限
-
DataGridViewの内容をDBに反映...
-
最新の日付とその金額をクエリ...
-
カレントレコードが無い事を判...
-
ファイル書込みで一行もしくは...
-
MERGE文を単体テーブルに対して...
-
差し込み印刷のレコード数について
-
ワードの差込印刷で教えて下さ...
-
【修正希望】【マクロ】元デー...
-
JSPのNULLレコード表示について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQL文で右から1文字だけ削除す...
-
使うべきでない文字。
-
sum()の出力結果順に並び替えを...
-
割合(パーセント)を求めるに...
-
【初歩】ラジオボタンをつかっ...
-
MySQLで MAX()とGROUP BYを使う...
-
【MYSQL】asでリネームしてwher...
-
チェックボックスの項目をDBにi...
-
SQLの集計で「全て」の合計も表...
-
カウント結果を1レコードの中...
-
表示幅を短くしたい
-
重複が
-
月別、販売員別の集計がわかり...
-
何にかが違うから エラーなんで...
-
SQLでデータを整形して取得可能...
-
MySQL のデータからドロップダ...
-
Oracleの監視。
-
1つのテーブルから複数のテーブ...
-
抽出時のことで質問です
-
JOINでの結果取得 サブクエリ...
おすすめ情報