- ベストアンサー
SQLPlusのグループ関数と小計について
- Oracle9iのSQLPlusにて、日ごとのIDごとの小計をとりたい。グループ関数の使い方がわかっていないため、うまくいかない。
- 現在のSQL文には、不要な項目の表示が含まれており、正しく小計を取得することができない。グルーピング対象外および小計対象外の項目の扱い方がわかっていない。
- 求めるSQLの出力結果は、20080901ごとに小計を表示し、さらにIDごとに小計を表示すること。しかし、現在のSQLでは不要な項目が表示されてしまい、期待する結果を得られない。
- みんなの回答 (5)
- 専門家の回答
関連するQ&A
- グループ化による集計
グループ化による集計 お世話になります。 下記の様にSQLで集計しようと考えています。 品番で小計額を出そうとしているのですが、 下記記述ですと、小計行が何か2行位ダブって表示されてしまっている様です。 どの様に記述したらダブらないで表示されるでしょうか。 私には少し高度な気がします。 どなたかご親切な方、ご教授下さいます様、宜しくお願いします。 記 select a.計画ID,a.品番,sum(a.合格本数) as 合格本数,sum(a.不良本数) as 不良本数, grouping(a.品番),TO_CHAR(a.受信日,'YYYY/MM/DD')as 受信日 from 伝票LOG a group by rollup(a.計画ID, a.品番, TO_CHAR(a.受信日,'YYYY/MM/DD')) order by a.計画ID 現在の表示 ID 品番 合格本数 不良本数 grouping(a.品番) 1030-2 yyy 20 0 0 1030-2 yyy 30 0 0 1030-2 yyy 50 0 0 ←この行は余計 1030-2 yyy 50 0 0 ←この行は余計 1030-2 (null) 50 0 1
- ベストアンサー
- Oracle
- access 2つのテーブルの最新日付の大小
顧客はIDにて管理していて、請求日テーブルに顧客ID、請求日の2つのフィールド、入金日テーブルに顧客ID、入金日と作り、どんどん追加していく仕組みにしています。 ここで、未入金の顧客を探したいと思っています。 入金日>請求日であれば出るとは思うのですが、SQLにて select max(T入金日.入金日) as 入金日, T入金日.ID from T入金日 group by T入金日.ID と作り、同様に請求日の式も作りましたが、この式どうしを比べる方法がわかりません。 クエリのデザインビューでも同じようなところまでは作れるのですが… また、請求日を基準にして前後半年入金のない顧客を探せる方法もあれば合わせて教えていただきたいです。 ヒントや作り方でもいいので、何かご教授ください
- 締切済み
- オフィス系ソフト
- 複数のグループ化でのSUM関数について
お世話になります。宜しくお願い致します。 MySQL4.1.15を使っております。 下記のようなテーブルがあるとします。 hoge_table | id1 | id2 | total | | 1 | 10 | 100 | | 1 | 10 | 100 | | 1 | 10 | 100 | | 2 | 20 | 200 | | 2 | 20 | 200 | | 3 | 20 | 300 | | 4 | 20 | 400 | | 4 | 20 | 400 | | 4 | 20 | 400 | | 4 | 20 | 400 | | 5 | 20 | 500 | | 5 | 20 | 500 | | 6 | 30 | 600 | | 7 | 30 | 700 | | 7 | 30 | 700 | | 7 | 30 | 700 | | 7 | 30 | 700 | | 8 | 30 | 800 | | 9 | 30 | 900 | | 9 | 30 | 900 | | 9 | 30 | 900 | | 9 | 30 | 900 | | 9 | 30 | 900 | このテーブルに対して、下記のような条件でTOTALを出したいのです。 条件: id2でグループ化させた上、同じid1のtotalから重複を削除した合計 id2をグループ化させると、10、20、30の3レコードにまとまり、sum関数を使ってtotalの合計を出すと SQL = select id1,id2,sum(total) as total from hoge_table | id1 | id2 | total | | 1 | 10 | 300 | | 5 | 20 | 3300 | | 9 | 30 | 8700 | という結果になるかと思います。 ここで、sum関数で合計させるtotalを、さらにid1で重複を削除したtotalのみを集計したいのです。 つまり、 | id1 | id2 | total | | 1 | 10 | 100 | | 5 | 20 | 1400 | | 9 | 30 | 3000 | という結果を出したいのですが、どうしてもこの結果が得られません。 サブクエリでid1をグループ化させたtotalをsum関数で集計してもやはりだめでした。 何か良い方法は無いのでしょうか? 何卒、ご教授の程、宜しくお願い致します。
- ベストアンサー
- MySQL
- グループ化したいのですが
テーブルAに以下のような項目があります。 [ID][SEI][MEI] やりたい事は、 ・[ID]ごとにグループ化して1行にまとめたい。 ・[SEI]と[MEI]をつなげて1つの項目として表示させたい。 これを実現させるには、どういうSQLを書けば良いでしょうか? 私が試したのは、以下のSQL文です。 SELECT ID,MIN(SEI) + MIN(MEI) AS NAME FROM TABLEA GROUP BY ID でも、これだと同じIDが複数存在すると[SEI][MEI]が別人のものがくっついてしまいます。当然ですが。 グループ化する前に[SEI][MEI]を連結させる処理が必要なのだろうと思うのですが、それをどうすれば良いのかが分かりません...。 どうかよろしくお願いします。m(_ _)m
- ベストアンサー
- SQL Server
- MysqlのONLY_FULL_GROUP_BY
MySQLの5.7.9でONLY_FULL_GROUP_BYを有効にしています。 3つのテーブル(a, b, m) を結合して以下のようにgroup byした際、with rollupを付けるとエラーになります。rollup なしでは通ります。これは正しい挙動でしょうか。 select a.aid, a.name, b.bid, sum(m.value) from a inner join b on a.aid = b.aid inner join m on m.bid = b.bid group by a.aid, b.bid a.aid, b.bid はいずれもprimary keyです。 with rollup時のエラーは"SELECT list is not in GROUP BY clause and contains nonaggregated column a.name functionally dependent on columns in GROUP BY clause"という内容ですが、a.nameはテーブルの定義上a.idによって一意に決まる値です。
- 締切済み
- MySQL
- 関数を教えて下さい
Microsoft Office Excel 97-2003 を使用しています。 (1) 期間の開始日から終了日までを求めたいのですが,開始日が含まれないため 1日少なく結果が出てしまいます。 式に +1 とすればよいのですが,きちんと式に組みこまれたような関数はないでしょうか。 (2) また,開始日や終了日が空白でも,日数が入ってしまい, 開始日や終了日が空白の場合は空白にしたいです。
- ベストアンサー
- その他MS Office製品
- SQLのcount()とgroup by
以下のようなテーブルがあったとき、 tbl1 id | score 1 | 100 1 | 200 1 | 300 2 | 200 2 | 100 3 | 300 3 | 400 3 | 500 3 | 600 idでまとめて個数を出すとすると、 SELECT count(*) FROM tbl1 group by id とすれば count(*) 3 2 4 と結果が返ってきますが、この結果にidを足して id | count(*) 1 | 3 2 | 2 3 | 4 というようなSQLはどうやって書けばいいのでしょうか? MySQLでは、 SELECT id, count(*) FROM tbl1 group by id と書けるのですが、これは標準的なSQLではNGなそうなので、気になって質問しました。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- グループ関数のエラーについて
下記SQLを実行するとエラーが返ってきます。 構文は合っていると思うのですが何故でしょうか。 1 select nation 2 from nation 3 group by nation 4* having area > avg(area) SQL> / having area > avg(area) * 行4でエラーが発生しました。: ORA-00979: GROUP BYの式ではありません。 副問合せをするとうまくいきました。 1 select nation 2 from nation 3* where area >(select avg(area) from nation) どちらの方法も同じ考え方だと思うのですが、上のやり方でエラーが出る理由を教えてほしいです。 回答のほどよろしくお願い致します。 SQL> desc nation; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- CODE NOT NULL NUMBER(5) NATION NOT NULL VARCHAR2(28) CAPITAL VARCHAR2(20) AREA NUMBER(22) POPULATION NUMBER(22)
- 締切済み
- Oracle
- グループ化したSQLの書き方について
XP&MySQL5&PHP5 ID,PASSWORD,name,tokutenn,zyukennbi,syozoku,bangou というフィールド(すべてテキスト型)を持つテーブル(result)があります。 (ID,PASSWORD,名前、得点、受験日、所属、社員番号) 全個人が最高得点を記録したレコードだけはSQLで書けます。 select ID, name ,max(result.tokuten) as maxtokuten from result group by ID, name ただ、最高得点を出したと同じレコードのそれ以外のフィールド(zyukennbi,syozoku,bangou) を表示させるSQLがわかりません。 何方か、ご存知の方おられましたら、ご教授ください。 よろしくお願いいたします。
- 締切済み
- PHP
- グループ関数の結果について
以下、SQLコマンドを入力するとレコードが選択されない結果になってしまいます。areaの平均より高いものが出力されるはずなのですが何故でしょうか? / 1 select nation,area 2 from nation 3 group by nation, area 4* having area > avg(area) SQL> / レコードが選択されませんでした。 SQL> desc nation; 名前 NULL? 型 ----------------------------------------- -------- ---------------------------- CODE NOT NULL NUMBER(5) NATION NOT NULL VARCHAR2(28) CAPITAL VARCHAR2(20) AREA NUMBER(22) POPULATION NUMBER(22)
- ベストアンサー
- Oracle
補足
いろいろと勉強になります。。 まず、メインクエリにて、TK14_NYUUKIN_DATE等の項目に「B.」とテーブル名を付けると、ORA-0904が発生しますね。。このテーブルの別名はサブクエリだけに有効となるのでしょうか?そもそも別名は不要ですか? また、メインクエリのSUMAMTとは単なる別名でしょうか?でもメインクエリに SUM(TK14_NYUUKIN_GAKU)と書いてもやはりORA-0904が発生します。 これはなぜなんでしょうか?? 奥深いですね。。。