- PR -

GROUP BYでいいのでしょうか?

1
投稿者投稿内容
もみじ
会議室デビュー日: 2005/01/14
投稿数: 3
投稿日時: 2005-01-14 20:05
はじめまして、もみじと申します。
ただいまSQLの勉強中なんですが、
ちょっとつまずいてしまい投稿しました。
使用しているのはACCESS 2000です。

以下のようなテーブルがあります。
-------------
ID| X | Y |
-------------
1 | 1 | 1 |
2 | 1 | 1 |
3 | 1 | 2 |
4 | 2 | 1 |
5 | 2 | 2 |
6 | 3 | 1 |
7 | 3 | 2 |
8 | 3 | 2 |
9 | 3 | 3 |
-------------

X列とY列の値が重複しているものを取り除いて
結果が欲しいのですがやり方がわかりません。

求めたい結果
-------------
ID| X | Y |
-------------
1 | 1 | 1 |
3 | 1 | 2 |
4 | 2 | 1 |
5 | 2 | 2 |
6 | 3 | 1 |
7 | 3 | 2 |
9 | 3 | 3 |
-------------


SELECT X,Y FROM テーブル名 GROUP BY X,Y
とするとX列とY列で重複していない物を取得出来
ますがこの場合ID列が取得出来ません。
-------------
X | Y |
-------------
1 | 1 |
1 | 2 |
2 | 1 |
2 | 2 |
3 | 1 |
3 | 2 |
3 | 3 |
-------------

SELECT ID,X,Y FROM テーブル名 GROUP BY ID,X,Y
とするとID列は取得出来ますがIDは一意な値なので
全行取得してしまいます。
-------------
ID| X | Y |
-------------
1 | 1 | 1 |
2 | 1 | 1 |
3 | 1 | 2 |
4 | 2 | 1 |
5 | 2 | 2 |
6 | 3 | 1 |
7 | 3 | 2 |
8 | 3 | 2 |
9 | 3 | 3 |
-------------

SELECT ID,X,Y FROM テーブル名 GROUP BY X,Y
とするとエラーになってしまいます。

GROUP BYを使うこと自体間違っているのでしょうか?
他に方法があるのでしょうか?

すなめり
常連さん
会議室デビュー日: 2003/01/29
投稿数: 37
お住まい・勤務地: 横浜
投稿日時: 2005-01-14 20:25
SELECT min(ID),X,Y FROM テーブル名 GROUP BY X,Y

だといかがでしょう?
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-01-17 10:40
単純に GROUP BYをしないで、
WHERE句に X <> Y をつけたらいかがでしょう?
もみじ
会議室デビュー日: 2005/01/14
投稿数: 3
投稿日時: 2005-01-17 13:54
すなめり様、
ありがとうございます。
ご教授頂いた方法でデータ
を取得することが出来ました。
もみじ
会議室デビュー日: 2005/01/14
投稿数: 3
投稿日時: 2005-01-17 14:08
夏椰様、
ありがとうございます。
この際、色々な方法を
覚えたいのです。


単純にWHERE句でx<>yとすると
xとyが異なるものを取得
してしまうのでID=1やID=9
といった必要な行が取得出来ま
せんでした。

私の説明が下手だったらすいません。
「X列とY列の値が重複」とは
X列とY列をひとまとまりの物としてみる感じです。
この場合ID=1の行とID=2の行はX列とY列の
値が同じになっているのでそれを取り除いて
どちらか一方の行のデータが欲しかったという
ことです。
コブラ
ぬし
会議室デビュー日: 2003/07/18
投稿数: 1038
お住まい・勤務地: 神奈川
投稿日時: 2005-01-17 15:15
MySQL 環境ですが、

select distinct(ID), X, Y from TABLE group by ID;
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2005-01-17 16:14
引用:

私の説明が下手だったらすいません。
「X列とY列の値が重複」とは
X列とY列をひとまとまりの物としてみる感じです。
この場合ID=1の行とID=2の行はX列とY列の
値が同じになっているのでそれを取り除いて
どちらか一方の行のデータが欲しかったという
ことです。


もろ勘違いしました。失礼しました。
で、いろいろな方法を学びたいとの事なので、
Group Byを使わない方法を考えてみました。

SELECT TABLE_1.id, TABLE.x, TABLE_1.y
FROM TABLEAS TABLE_1
where TABLE_1.x & TABLE_1.y not in
( select TABLE.x & TABLE.y from TABLE where TABLE.id < TABLE_1.id ) ;

こんなんはいかがでしょう?
1

スキルアップ/キャリアアップ(JOB@IT)