GROUP BY句について

このQ&Aのポイント
  • SQL_PLUSでの質問です。GROUP BY句の『'A' AS 区分』は必要なのでしょうか。
  • 何気なくプログラムを見ていたら、目に留まりました。このままでもコンパイルは通るので問題はないのですが、決まった値を設定しているのだから、必要ないような気がするのです。
  • 環境はWin2000 Oracle 9iです。ご存知の方、教えて下さい。
回答を見る
  • ベストアンサー

GROUP BY句について

SQL_PLUSでの質問です。 以下のSELECT句があります。 GROUP BY句の『'A' AS 区分』は必要なのでしょうか。 ----------------------------- SELECT 商品コード AS 商品コード, 商品名 AS 商品名, 'A' AS 区分, SUM(金額) AS 金額 FROM 売上トラン GROUP BY 商品コード AS 商品コード, 商品名 AS 商品名, 'A' AS 区分; ----------------------------- 何気なくプログラムを見ていたら、目に留まりました。 このままでもコンパイルは通るので問題はないのですが、 決まった値を設定しているのだから、必要ないような気がするのです。 環境はWin2000 Oracle 9i です。 ご存知の方、教えて下さい。

  • Oracle
  • 回答数2
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは。 SELECTの項目に含める以上、GROUP BYに含めなければなりません・・・。 この場合、「A」は合計値などではありません。 内部的に全レコード分「A」が出来ますので、数が合わなくなります・・・。 説明が下手ですが、なんとなくわかります? (^^ゞ

tyurajima
質問者

お礼

SELECTに含めるとGROUP BYにも含めないといけないのですね。納得しました。 確かに’A'は集計値ではありませんから(笑) ありがとうございました。

その他の回答 (1)

回答No.1

こんにちは。 データの結果セットとして、区分という項目に固定で「A」が欲しかっただけですね。 必要かどうかは、その取得結果をどう使ってるかによりますが・・・。 (^^ゞ

tyurajima
質問者

お礼

回答ありがとうございます。 欲しい項目は、商品コード・商品名・区分・合計金額です。 商品コードと商品名はそれぞれ複数存在し、その集計をするためにGROUP BYを使うのは分かるんですが、 区分は固定で”A”を設定しているので、GROUP BYを使う必要はないと思ったのですが・・・

関連するQ&A

  • GROUP BY 句を 2つ組み合わせる方法

    【質問】 GROUP BY 句を 2つ組み合わせて、集計の集計を行う方法ってありますか? 下記対象SQLで集計を行うとメインのF_在庫履歴には、商品コードがあり、計算値の金額が 正常に出力されません。 一度、GROUP BY 句に商品コードを追加し、商品コード単位の金額合計値を取得後、 その合計値のSQLから、下記の様に、営業所単位の金額合計値を求める手法はありますでしょうか。 よろしくお願いします。 ●対象SQL SELECT TO_NUMBER(SUBSTR(S.処理対象年月日,1,6)) AS 処理対象年月 , S.内部CD AS 部CD , S.管理営業所CD AS 営業所CD , 631 AS 科目CD , (SUM(S.前月末在庫数) + SUM(S.仕入数) - SUM(S.仕入返品数) + SUM(S.移動入庫数) + SUM(S.調整入庫数) - SUM(S.売上数) + SUM(S.売上返品数) - SUM(S.移動出庫数) - SUM(S.調整出庫数) - SUM(S.仮売上数量) - SUM(S.工事出庫数量)) * MAX(DISTINCT S.在庫原価) * -1 AS 金額 FROM F_在庫履歴 S WHERE S.処理対象年月日 = W処理対象年月日 GROUP BY S.内部CD,S.管理営業所CD, TO_NUMBER(SUBSTR(S.処理対象年月日,1,6));

  • group by句

    以下のSQL文がoracle9iでOKで8iで通らないのですが、8iでも通るようになんとかできないでしょうか。 select a.val_Id, (select val_nm from tableA where val_id = a.val_id) as val_nm from tableA a group by a.val_id テーブルの内容 tableA( val_id number(1,0), val_code number(2,0), val_nm varchar(10) ) val_idとval_codeで一意となっています。 val_nmはval_idと一対一になっています。 要するにval_idに対応するval_nmも一緒に取得したいのですが、select句のサブクエリで8iの場合"group byの式ではありません"とおこられてしまいます。 ちなみに、今ここでは簡略化しているのですが本来は色なテーブルを結合しているので、単にgroup by val_id,val_nmとするのは無しでお願いいたします。 わかりにくいかとは思いますがお知恵をお貸しください。宜しくお願いいたします。

  • SQLPLUSのGROUP BY句について

    Oracle9iのSQLPLUSにて、GROUP BY句で指定した列以外の列をSELECT文の選択結果に表示させたいだけなのですがうまくいきません。 SELECT 列A,列B,列C FROM テーブル1 A INNER JOIN ( SELECT 列A,COUNT(*) FROM テーブル1 GROUP BY 列A HAVING COUNT(*) >= 2 ) B ON A.列A = B.列A 「"B.列A"が無効識別子です」エラーが発生します。 何卒宜しくお願い致します。

  • distinct句を使わずレコード総計を求めたい

    DB初心者です。 DISTINCT句を使わずに、group by句を使って 重複データを除いたレコード総計を求めたいと思い、 下記の用にSQL文を書いたのですがうまくいきません。 oracleではなく、DB2を使っているのですがSQL文として 可能なのか教えていただければと思い質問を致しました。 <例> テーブル名:商品DB 商品名 a a b b c だったら、重複を除いたレコード数は3になりますが、 select count(*) from 商品DB group by 商品名 とすると 2 2 1 となり、それぞれの商品の合計数が出てしまうので select count(*) from ( select 商品名 from 商品DB group by 商品名) と副問合せ(でよいのでしょうか?)をしてみると 入力が予想されるトークンには "AS" が含まれている可能性があります。とエラーになってしまいました。

  • 【SQL】group byについて

    SELECT A.商品名 B.商品名 FORM A,B WHERE ((A.店コード IN (引数.店コード)) and (A.商品コード IN(引数.商品コード)) AND (A.店コード = C.店コード) AND ((A.商品コード = D.商品コード) AND (A.店コード = D.店コード)) というSQLに下記条件を追加したいのですが、集計関数の使用方法がわかりません。 SELECT Sum(金額) FROM Q WHERE Q.店コード = A.店コード AND Q.商品コード = A.商品コード GROUP BY Q.店コード, Q.商品コード Qテーブルは 店コード、商品コード、メニューコード がKEYなのですが、 店コードと商品コードだけで集計した値をSELECTしたいのです。 恐れ入りますが、ご教授頂けますよう宜しくお願いします。

  • SQLのGROUP BYについて

    商業高校、情報処理部の2年です。 大会の問題で以下のようなスキーマとSELECT文がありました。 ●業務管理スキーマ(一部抜粋) 従業員(従業員コード,従業員区分,従業員氏名) 勤務(従業員コード,勤務日,開始時刻,勤務時間) 賃金(従業員区分,時間単価) SELECT X.従業員コード , X.従業員氏名 , SUM(Y.勤務時間) * Z.時間単価 AS 総支給額 FROM 従業員 X , 勤務 Y , 賃金 Z WHERE X.従業員コード = Y.従業員コード AND X.従業員区分 = Z.従業員区分 AND X.従業員区分 BETWEEN 1 AND 3 GROUP BY 〔   〕 この穴埋めの答えが、「X.従業員コード , X.従業員氏名」となっていました。 SELECTに書く列名は、GROUP BYで指定された列名でなければならないと聞いたのですが、この問題では、SELECTには書かれている「時間単価」がGROUP BYに書かれていません。 なぜなのか、理由がわかりません。 あるいは、この解答が間違っているのでしょうか? 詳しい方、よろしくお願いします。

  • group by句

    色々と試行錯誤してやっていますが、なかなか自分の 思うような結果が得られないためご質問させて下さい。 テーブルが全部で3つあります。 テーブルA id name 1 巨人 2   西武 テーブルB id name 1 小笠原 2 ラミレス 3 中島 4  片岡 テーブルC id テーブルAID テーブルBID 背番号 1 1 1 30 2 1 2 10 3 2 3 3 4 2 4 8 テーブルを結合し、テーブルCにある 背番号をテーブルAid,テーブルBidを元に sumしたいのですがうまくいきません。 以下がそのSQLになります。 (1)サブクエリーを使ったSQL この場合値が重複されて表示されてしまいます。 select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id group by c.テーブルAid ), (select sum(背番号) from tableC c where c.テーブルBid = bid group by c.テーブルBid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid (2) select a.name,b.name,c.name, (select sum(背番号) from tableC c where c.テーブルAId = a.id ), (select sum(背番号) from tableC c where c.テーブルBid = bid ) from tableC c inner join tableA a on a.id = c.テーブルAid inner join tableB b on b.id = c.テーブルBid group by c.テーブルAid 重複はされないのですが、group byが一つのみなので ちゃんとした出力がされません。    他にやり方があるのかもしれませんが、お分かりになる方が    いらっしゃいましたら、ご教授お願い致します。

  • 条件付GROUP BY句の記述方法

    テーブルAには 列A 数値列 ID列(主キー) の 3つの列があるのですが このテーブルのデータを列AでGROUP BYする際 ID列のデータが5と10の物だけGROUP BYの 対象にしたいのですが そのまま流すとGROUP BYでIDが指定されてません、 HAVING句では無効です。 とメッセージが出ます、 かと言ってID列をGROUP BYすると 主キーなのでSUMが5と10の物に分かれてしまいます。 これはどのようにして回避すればいいのでしょうか? SELECT 列A,SUM(数値列) FROM テーブルA GROUP BY 列A HAVING ID列 IN (5,10) 環境 Win2000 SQLServer2000

  • SQL文(基礎内容)

    アドバイスお願いします。 Oracle-Ver-8。 基本中の基本の中身になると思いますが、教えてください。こういったことができるのかお願いします。 SQL文の内容ですが、 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ************************************************** SELECT A.商品コード, A.商品名, SUM(DECODE(B.月,1,1月売上,0)) AS 1月, SUM(DECODE(B.月,2,2月売上,0)) AS 2月, SUM(DECODE(B.月,3,3月売上,0)) AS 3月, : : FROM (状態が'ABC'のもの) A GROUP BY A.商品コード,A.商品名 ************************************************* ↑↑↑ このSQLに異なった状態のもの、'DEF'からも項目を追加したい場合、一つのSQLでどのように表現したらよいのでしょうか?可能でしょうか? 例、 ************************************************** SELECT A.商品コード, A.商品名, SUM(DECODE(B.月,13,13,13月売上,0)) AS 13月, SUM(DECODE(A.月,1,1月売上,0)) AS 1月, SUM(DECODE(A.月,2,2月売上,0)) AS 2月, SUM(DECODE(A.月,3,3月売上,0)) AS 3月, : : FROM (状態が'ABC'のもの) A, (状態が'DEF'のもの) B WHERE 結合条件????? GROUP BY A.商品コード,A.商品名 ************************************************* よろしくお願いします。

  • MySQLのgroup by同士の結合について

    下記のようなSQLについてご指南頂きたく思います。 下記のようなテーブルがあり、 商品毎の売上を販売店毎に 売れた順に格納しています。 <販売テーブル> No | 商品コード | 販売個数 | 販売店コード --------------------------------------------- 1  | 商品A   |   1  | 1 2  | 商品A   |   1  | 2 3  | 商品A   |   1  | 3 4  | 商品B   |   2  | 1 5  | 商品B   |   2  | 2 6  | 商品B   |   1  | 3 7  | 商品A   |   3  | 1 8  | 商品A   |   4  | 2 9  | 商品A   |   1  | 3   上記のテーブルを使って下記のようなデータを取ってきたく考えております。   |商品コード|販売個数              |販売店コード |商品コード毎販売個数合計   |       |※ある商品の店毎の販売総数|          |※ある商品の販売総数   --------------------------------------------------------------------------------   | 商品A  |   4               | 1        | 11   | 商品A  |   5               | 2        | 11   | 商品A  |   2               | 3        | 11   | 商品B  |   2               | 1        |  5   | 商品B  |   2               | 2        |  5   | 商品B  |   1               | 3        |  5   -----------------------------------------------------------------------------   やり方としては下記の(1)と(2)の結合ができれば良いと考えております。   一回のSQLで上記の結果を得られるようにしたいと考えております。   どなたかアドバイス頂ければと思います。   宜しくお願い致します。 (1)下記のようなSELECT文で商品コード毎の集計はできました。    SELECT 商品コード,SUM(販売個数) FROM 販売テーブル group by 販売テーブル.商品コード;   | 商品コード  |販売個数             |         |※ある商品の店毎の販売総数   ---------------------------------------   | 商品A     |  11             | 商品B     |   5          (2)また、下記のようなSELECT文で販売店、商品コード毎の集計もできました。    SELECT 商品コード, SUM(販売個数), 販売店コード FROM 販売テーブル                       GROUP BY CONCAT(商品コード,'and',販売店コード) ;   | 商品コード |販売個数              |販売店コード   |        |※ある商品の店毎の販売総数 |        ----------------------------------------------------   | 商品A   |   4                | 1       | 商品A   |   5                | 2       | 商品A   |   2                | 3       | 商品B   |   2                | 1       | 商品B   |   2                | 2       | 商品B   |   1                | 3       ----------------------------------------------------

    • ベストアンサー
    • MySQL