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

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

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

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

Q&A

解決済

1回答

5604閲覧

ORACLE カウント数を取得し四則演算をしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

0グッド

0クリップ

投稿2019/02/27 04:52

編集2019/02/27 07:00

selectでテーブルA,テーブルBの数を取得した後にテーブルAとテーブルBの差を求めてその差に×2をしたいです。
調べてみましたがあまり参考になるサイトがありませんでした。
わかる方がいたら教えてください。

oracle

1SELECT 2 COUNT(A) 3 , COUNT(B) 4FROM 5 A 6 LEFT JOIN B 7 ON A.aaa = B.bbb

追記

SELECT SUM(CASE WHEN TM.PREFECTURE LIKE 'S%' THEN 1 ELSE 0 END) AS 北海道 ,SUM(CASE WHEN TM.PREFECTURE LIKE 'T%' THEN 1 ELSE 0 END) AS 東京 ,SUM(CASE WHEN TM.PREFECTURE LIKE 'N%' THEN 1 ELSE 0 END) AS 名古屋 , (select count(*) - (select count(*) from T_FIRST_ORDER TFO where TFO.USER_CD = '444444'))AS 合計 FROM T_FIRST_ORDER TFO INNER JOIN T_MANAGER TM ON TFO.ORDER_NO = TM.ORDER_NO WHERE TRUNC(TM.IN_DATE) <= sysdate AND TRUNC(TM.IN_DATE) IS NOT NULL AND( TRUNC(TM.OUT_DATE) >= sysdate OR TRUNC(TM.OUT_DATE) IS NULL );

取得したいのは 北海道の数、東京の数、名古屋の数、そして全部の数からUSER_CDが444444以外の数を取得して2をかけたいです。
, (select count() - (select count() from T_FIRST_ORDER TFO where TFO.USER_CD = '444444'))AS 合計の文を抜けば北海道、東京、名古屋は取得できるのですが、この全体からUSER_CDのカラム数を引いた文を入れるとエラーになってしまいます。
書き方がおかしいと思うのですが何がおかしいのかわかりません

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

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

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

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

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

guest

回答1

0

ベストアンサー

SQL

1select ( 2 (select count(*) from テーブルA) - (select count(*) from テーブルB) 3 ) * 2 4from dual

とか

SQL

1select ( 2 count(*) - (select count(*) from テーブルB) 3 ) * 2 4from テーブルA

テーブル同士の関係がああるなら

SQL

1select a.aaa, (a.cnt - b.cnt)*2 2from ( 3 select aaa, count(*) cnt 4 from テーブルA 5 group by aaa 6) a 7inner join ( 8 select bbb, count(*) cnt 9 from テーブルA 10 group by bbb 11) b 12on a.aaa=b.bbb

追記

SQL

1select list.* 2 , (-(select count(*) from T_FIRST_ORDER TFO where TFO.USER_CD = '444444')) *2 3from ( 4 SELECT 5 SUM(CASE WHEN TM.PREFECTURE LIKE 'S%' THEN 1 ELSE 0 END) AS 北海道 6 ,SUM(CASE WHEN TM.PREFECTURE LIKE 'T%' THEN 1 ELSE 0 END) AS 東京 7 ,SUM(CASE WHEN TM.PREFECTURE LIKE 'N%' THEN 1 ELSE 0 END) AS 名古屋 8 ,count(*) as9 FROM 10 T_FIRST_ORDER TFO 11 INNER JOIN T_MANAGER TM 12 ON TFO.ORDER_NO = TM.ORDER_NO 13 WHERE 14 TRUNC(TM.IN_DATE) <= sysdate 15 AND TRUNC(TM.IN_DATE) IS NOT NULL 16 AND( 17 TRUNC(TM.OUT_DATE) >= sysdate 18 OR TRUNC(TM.OUT_DATE) IS NULL 19 ) 20 ) list

投稿2019/02/27 05:08

編集2019/02/27 07:18
sazi

総合スコア25173

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

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

退会済みユーザー

退会済みユーザー

2019/02/27 07:01

ありがとうございます。 参考にしてやってみましたが技術不足でなかなか思うようにできませんでした。 上記に追加で質問を挙げたので回答してもらえると嬉しいです
退会済みユーザー

退会済みユーザー

2019/02/27 07:28

ありがとうございます。 出来ました!。 ただ理解ができていないのでlistについては調べてみようと思います。
sazi

2019/02/27 07:31

listというのは単なる名前です。 sum()を使うというのは基本group byの指定とセットです。 ただ今回の場合、全体の集計なのでgroup byは指定しない事になります。 そこにサブクエリーを追加するとgroup byの項目じゃないというエラーになるのです。
退会済みユーザー

退会済みユーザー

2019/02/27 07:51

詳しく説明してくださりありがとうございます!!
退会済みユーザー

退会済みユーザー

2019/02/27 07:55

(計 -(select count(*) from T_FIRST_ORDER TFO where TFO.USER_CD = '444444')) *2 で444444の数にも2をかけて そのあとに4444444以外に*2をしたものとと4444444に*2をしたものの合計を出す時にはまたやり方が違ってくるのでしょうか? お時間があればご回答してくださるとありがたいです
sazi

2019/02/27 08:13

いまいち理解できませんが、USER_CD の条件が異なるものについても演算に加えたいというなら、 (計 -(select count(*) from T_FIRST_ORDER TFO where TFO.USER_CD = '444444')) *2 +(計 -(select count(*) from T_FIRST_ORDER TFO where TFO.USER_CD = '555555')) *2 というような形式です。 定型的なものなら、with式で展開しておいた方が記述は簡潔になります。
退会済みユーザー

退会済みユーザー

2019/03/01 06:56

返信遅れました。 ご回答ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問