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

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

新規登録して質問してみよう
ただいま回答率
85.35%
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

3回答

2816閲覧

SQLでWhere文を使わずに指標ごとに抽出条件を設定する方法は?

Ponta2929

総合スコア16

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/08/25 09:03

編集2020/08/25 09:06

SELECT分の中で出す数値の抽出条件を指定する事は出来ないのでしょうか?
MYSQLでデータを出しています。

たとえば以下のデータから日ごとに各ステータスのタスク数を別カラムで出すとします。
イメージ説明

欲しいアウトプットは以下のようなものです。
イメージ説明

今はWHERE分で四つのステータス(終了、実行中、未実行、不明)ごとにサブクエリを作って結合しています。

しかし、このやり方だとステータスの数だけ同じクエリ(SELECT/FROMなど)を書かなくてはいけず、可読性が低く困っています。

たとえば
SELECT 終了したタスクID数、実行中のタスクID数、未実行のタスクID数、不明のタスクID数
GROUP BY '実行日'

というようにSELECT分の中でステータスでデータを絞る方法はないでしょうか?
宜しくお願い致します。

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

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

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

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

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

gentaro

2020/08/25 09:43

SQLには方言が多数存在するので具体的なRDBMS名やバージョン等を質問文に記載してください。 現状ではタグに「SQL Server」と「PL/SQL」が付けられており、SQL Serverのつもりで回答したら質問者の環境がOracleで、無意味な回答になってしまう、という事があり得ます。 タグも適切に付けてください。
退会済みユーザー

退会済みユーザー

2020/08/25 09:45

そういう質問を起こすときは、CREATE TABLE文とサンプルデータのINSERT INTO文もセットで示してもらったほうが、コメントもらいやすいですよ。
Ponta2929

2020/08/25 10:47

>gentaroさん すみません! MySQLなのですが、出てきたタグを追加してしまいました。 >m6uさん 既存のテーブルから分析のために出したいので 自分はCREATE TABLE/INSERT INTOはやってないです。。
退会済みユーザー

退会済みユーザー

2020/08/25 11:24

間違って伝わるとまずいことは、速やかに質問文の編集で直してほしいです。いちいち質問への追記・修正のコメントまで読まなくても伝わるよう、改善を。
gentaro

2020/08/25 15:27

後から見る人の迷惑になるので、速やかにタグを修正してください。
退会済みユーザー

退会済みユーザー

2020/08/27 07:36

回答が必要ならcreate table文くらい用意しましょう。 確認用入力テストデータも用意しましょう。 検証用正解出力データも用意しましょう。 そんなものも用意できない人が回答欲しいとか傲慢だと思います。
Orlofsky

2020/09/17 16:18

[PL/SQL]タグは関係ないから外してください。
guest

回答3

0

SQL

1SELECT 実行日 2, COALESCE(COUNT(DISTINCT CASE ステータス WHEN '終了' THEN タスクID END), 0) 終了したタスク 3, COALESCE(COUNT(DISTINCT CASE ステータス WHEN '実行中' THEN タスクID END), 0) 実行中のタスク 4, COALESCE(COUNT(DISTINCT CASE ステータス WHEN '未実行' THEN タスクID END), 0) 未実行のタスク 5, COALESCE(COUNT(DISTINCT CASE ステータス WHEN '不明' THEN タスクID END), 0) 不明のタスク 6FROM テーブル 7GROUP BY 実行日 8ORDER BY 実行日;

です。

投稿2020/08/25 14:39

iruyas

総合スコア1067

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

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

0

タグがSQL Serverで、本文中がMySQLと書かれているのでMySQLだと仮定して回答します。

sql

1create table tasks 2( 3 task_id varchar(30) not null, 4 status varchar(30) not null, 5 exec_date date not null 6)

sql

1select 2 exec_date, 3 sum(if(status = '終了', 1 , 0)) as '終了したタスク', 4 sum(if(status = '実行中', 1 , 0)) as '実行中のタスク', 5 sum(if(status = '未実行', 1 , 0)) as '未実行のタスク', 6 sum(if(status = '不明', 1 , 0)) as '不明のタスク' 7from tasks 8group by exec_date 9order by exec_date;

投稿2020/08/25 09:55

YakumoSaki

総合スコア2027

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

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

Ponta2929

2020/08/25 10:15

ありがとうございます! COUNTではなく、ユニークなtask_idの数を出すにはどうすればいいですか?
YakumoSaki

2020/08/25 11:22

ちょっと求めてる仕様がよくわからないので、質問のデータと求めたい結果の表を修正して頂けますか? `from tasks` のところで task_idをユニークに(distinctあたりを使って)すれば可能だと思います。
guest

0

ステータスと実行日をGROUP BYで指定して、
タスクの数をCOUNT()すれば出そうな気がするけど、
まずはデータ構造を示してね。

投稿2020/08/25 09:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Ponta2929

2020/08/25 10:46

ステータス、実行日をGROUP BYしてCOUNT()をすると カラムがタスクの数になってしまいます。 やりたいことはSQLで出したアウトプットで別のカラムとしてそれぞれのステータスの数が出ていることです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問