MitsuiRyohei
@MitsuiRyohei

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

小計と合計を1つのSQL(クエリ)で出せますか?

質問&ご教示ください。
小計と合計的なものを1つのSQL で取得できないものかと思っているのですが、SQL に詳しくなくて、そもそもできるのか?
できるとしたらどのように実装するのか?
お知恵をお貸しください。

・開発環境:Access 2019

[質問内容]
1.こんなテーブルがあって

性別 氏名
Kirito
Asuna
Yui
Klein
Sinon

2.こんな結果を得たいのです。
 ・性別毎の件数と全体の合計

性別 件数
2
3
合計 5

男女別の件数も全体の合計もそれぞれに取得する SQL はわかるのですが、1つの SQL で両方を一度に取得する SQL って書けるでしょうか?
具体的に SQL を教えていただきたいです。

よろしくお願いします。

0

2Answer

@D-Three

回答ありがとうございます。
いただきました回答を参考に Access で実装してみたらうまくできました。

以下は、ご参考までに。
※こちらのフォーマットを理解していません。ベタ書きですが、ご容赦くださいませ。

まず、CASE式を使用した解決法ですが、Access では、CASE式は使用できませんでした。
CASE式と同じような条件分岐をする場合は、Switch関数を使用すればできるとのことでした。
ただ、「合計」をカウントするケースの書きっぷりがわからなかったので、ひとまず飛ばしました。
ちなみに Switch関数の使い方は以下のとおりでした。

【構文】
  Switch(expression-1, value-1 [,expression-2, value-2]…)

※ROLLUP にも対応していないようです。ここはしっかり調べたわけではありませんが…。


つぎに、UNION ALL を使用した解決法です。
こちらは回答の内容どおりの実装で、Access でも問題なく動作しました。

ほんとうにどうもありがとうございました。
助かりました。

1Like

Access2019が手元にないので、標準SQLの話で申し訳ないですが、ROLLUPを使用することで、目的の結果が得られるかと思います。

SELECT
	CASE GROUPING(性別)
		WHEN 1 THEN '合計'
		ELSE 性別
	END AS 性別
	,COUNT(*) AS 件数
FROM
	登場人物
GROUP BY ROLLUP
	(性別)

ROLLUPに対応していない場合、UNION ALLで同等のことが可能です。

SELECT
	性別
	,COUNT(*) AS 件数
FROM
	登場人物
GROUP BY
	性別

UNION ALL

SELECT
	'合計'
	,COUNT(*)
FROM
	登場人物
0Like

Your answer might help someone💌