質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

5449閲覧

SQL文で複数の結果を表示させたい

kayabacho

総合スコア11

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

GROUP BY

GROUP BYとはSQL文のひとつで、SELECT文において特定の列の値が等しい行ごとに表をグループ化します。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/12/24 06:41

SELECT count(A_cnt.cnt)
FROM
(SELECT count(A._id) AS cnt
FROM
(SELECT DISTINCT _index ,_id
AS _ABCDE
FROM A.Atable
WHERE corpid = 1
AND((dt >= 20201224 AND dt <= 20201224)
OR (dt >= 20201225 AND dt <= 20201225))
AND "$word" LIKE '%id.%'
AND _index is NOT NULL) zdp
GROUP BY A._id) A_cnt
現在、クエリを作成しており2020/12/24と2020/12/25の両方の集計を出したく思っていますが、下記のように結果がまとめて表示されてしまいます。
■結果

1 1453

一回一回クエリをたたくと膨大な時間がかかってしまうので質問させていただきたいです。

■理想

1 1453
2 787
....

12/24の値と12/25の値は全然別の値なので表示させる際は別々にそれぞれの結果がわかるように表示させたいです。
ですが、合計して換算されてしまうのはなぜでしょうか?
SQLにお詳しい方、書き方を教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

見易くするために整形します。

SQL

1SELECT count(A_cnt.cnt) 2FROM ( 3 SELECT count(A._id) AS cnt 4 FROM ( 5 SELECT DISTINCT _index ,_id AS _ABCDE 6 FROM A.Atable 7 WHERE corpid = 1 8 AND ( 9 (dt >= 20201224 AND dt <= 20201224) 10 OR (dt >= 20201225 AND dt <= 20201225) 11 ) 12 AND "$word" LIKE '%id.%' 13 AND _index is NOT NULL 14 ) zdp 15 GROUP BY A._id 16) A_cnt

合計して換算されてしまうのはなぜでしょうか?

ID毎に出力したいのですよね。
最後にgroup byの指定なしに全体で集計しているからです。
余分なネストを外せばよいと思います。

SQL

1SELECT A._id, count(A._id) AS cnt 2FROM ( 3 SELECT DISTINCT _index ,_id AS _ABCDE 4 FROM A.Atable 5 WHERE corpid = 1 6 AND ( 7 (dt >= 20201224 AND dt <= 20201224) 8 OR (dt >= 20201225 AND dt <= 20201225) 9 ) 10 AND "$word" LIKE '%id.%' 11 AND _index is NOT NULL 12) zdp 13GROUP BY A._id

日付毎に出力したいという事なら、そもそもgroup byの指定が正しくありません。

SQL

1SELECT dt , count(*) as cnt 2FROM A.Atable 3WHERE corpid = 1 4 AND ( 5 (dt >= 20201224 AND dt <= 20201224) 6 OR (dt >= 20201225 AND dt <= 20201225) 7 ) 8 AND "$word" LIKE '%id.%' 9 AND _index is NOT NULL 10GROUP BY dt

投稿2020/12/24 07:30

編集2020/12/24 07:37
sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問