Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1262 / 2272 ツリー ←次へ | 前へ→

【7974】集計後の最大値を表示するSQL HANA 06/6/13(火) 10:47 質問[未読]
【7975】Re:集計後の最大値を表示するSQL 小僧 06/6/13(火) 11:33 回答[未読]
【7976】TOP値を取ってくる場合の疑問点 HANA 06/6/13(火) 12:03 発言[未読]
【7977】Re:TOP値を取ってくる場合の疑問点 小僧 06/6/13(火) 12:53 回答[未読]
【7978】Re:TOP値を取ってくる場合の疑問点 HANA 06/6/13(火) 13:08 お礼[未読]

【7974】集計後の最大値を表示するSQL
質問  HANA  - 06/6/13(火) 10:47 -

引用なし
パスワード
   はじめまして。HANAと申します
TABLE名 TABLE1で

KNO(番号) SUBNO(枝番) KIN(金額)
A1601     00       500
A1601     01       1500 
B1756     00       200
B1756     01       300
 ・
 ・
といったデータが登録されており、このデータのKINをKNO別に集計した上で
集計結果の最大値を持つKNOと合計(KIN)を出力させたいのですが
なかなか上手くいきません。

SELECT KNO,MAX(KIN) FROM TABLE1 GROUP BY KNO
 WHERE MAX(KIN) =(SELECT SUM(KIN) FROM TABLE1 GROUP BY KNO);

なんてSQL でTRYしたのですが、あえなくエラーでした。
SQLの勉強を独学ではじめたばかりなので、色々なサイトを調べたり
GOOGLE検索もやってみたのですが、なかなか解答が見つからなくて
困っています。
 どうかご教授をお願いします。

【7975】Re:集計後の最大値を表示するSQL
回答  小僧  - 06/6/13(火) 11:33 -

引用なし
パスワード
   ▼HANA さん:
こんにちは。

> SQLの勉強を独学ではじめたばかりなので、

SQLが使えると便利ですよね。
当方もAccessを使いこなす内にSQLを覚える必要を感じて
クエリの SQLビューに 助けられながら精進しております。


>KNO(番号) SUBNO(枝番) KIN(金額)
>A1601     00       500
>A1601     01       1500 
>B1756     00       200
>B1756     01       300
> ・
> ・
>といったデータが登録されており、このデータのKINをKNO別に集計した上で
>集計結果の最大値を持つKNOと合計(KIN)を出力させたいのですが
>なかなか上手くいきません。


まずは普通に集計すると、

SELECT TABLE1.KNO, Sum(TABLE1.KIN) AS KINの合計
FROM TABLE1
GROUP BY TABLE1.KNO;

KNO    KINの合計
A1601    2,000
B1756    500

と結果が返りますよね。
ここで「最大値」という考え方を改めて…。

KINの合計をソートして、
そのTOP値を取ってくるというのはいかがでしょうか。

SELECT TOP 1 TABLE1.KNO, Sum(TABLE1.KIN) AS KINの合計
FROM TABLE1
GROUP BY TABLE1.KNO
ORDER BY Sum(TABLE1.KIN) DESC;

【7976】TOP値を取ってくる場合の疑問点
発言  HANA  - 06/6/13(火) 12:03 -

引用なし
パスワード
   ▼小僧 さん:
早速のご教授ありがとうございます
>
>ここで「最大値」という考え方を改めて…。
>
>KINの合計をソートして、
>そのTOP値を取ってくるというのはいかがでしょうか。
>
実は、私もそれを考えてやってみたんです。その結果
   1. TOPの値に同じ値が複数合った場合問題が出る(1個しか出ない)
   2. 何らかのサブクエリーかHAVINGか・・・・何か使えば可能なはず?
と思って、上位 1位 の出力を止めて、また考え始めちゃったんです。

>SELECT TOP 1 TABLE1.KNO, Sum(TABLE1.KIN) AS KINの合計
>FROM TABLE1
>GROUP BY TABLE1.KNO
>ORDER BY Sum(TABLE1.KIN) DESC;

下記が TRYしたSQLです

SELECT KNO, Sum(TABLE1.KIN) AS KINの合計
FROM TABLE1
GROUP BY KNO
ORDER BY KINの合計 DESC
LIMIT 1;
・・・MySQL独特のLIMIT 1 を使いました・・・

でも、小僧さん お答えいただいて、心強いです。

【7977】Re:TOP値を取ってくる場合の疑問点
回答  小僧  - 06/6/13(火) 12:53 -

引用なし
パスワード
   ▼HANA さん:
こんにちは。

>・・・MySQL独特のLIMIT 1 を使いました・・・

まずは結果が返ってきて何よりです。

>>SELECT TOP 1 TABLE1.KNO, Sum(TABLE1.KIN) AS KINの合計
>>FROM TABLE1
>>GROUP BY TABLE1.KNO
>>ORDER BY Sum(TABLE1.KIN) DESC;

KNO    SUBNO    KIN
A1601    00    500
A1601    01    1,500
B1756    00    200
B1756    01    300
C1234    00    2,000

の様なデータですと、

KNO    KINの合計
C1234    2,000
A1601    2,000

と結果が返りますよ^^
(当方WindowsXP、Access2003)

【7978】Re:TOP値を取ってくる場合の疑問点
お礼  HANA  - 06/6/13(火) 13:08 -

引用なし
パスワード
   ▼小僧 さん:
>まずは結果が返ってきて何よりです。
ありがとうございました。
結果は小僧さんと同じものです。
独学はやはり不安ですね。
小僧さんの明快な答えで納得いきました。

1262 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078228
(SS)C-BOARD v3.8 is Free