My SQLについての質問です。


以下のデータがあるとします。

id data
+-+------+
|1|BBB   |
+-+------+
|2|AAA   |
+-+------+
|3|BBB   |
+-+------+
|4|BBB   |
+-+------+
|5|AAA   |
+-+------+
|6|CCC   |
+-+------+

この場合、データの種類は全部で3種類、AAA、BBB、CCCになるのですが、
MySQLで「 AAA BBB CCC 」の3種類だけを抽出したい場合はどうすれば
いいでしょうか?

よろしくお願い致します。

回答の条件
  • URL必須
  • 1人30回まで
  • 登録:2007/06/22 19:51:43
  • 終了:2007/06/26 10:58:24

回答(3件)

id:taknt No.1

きゃづみぃ回答回数13537ベストアンサー獲得回数11982007/06/22 20:19:58

ポイント30pt

http://dev.mysql.com/doc/refman/5.1/ja/charset-collate.html

select DISTINCT data from テーブル名

で いかがでしょうか?

id:zachouR

ありがとうございます、さっそく実装しました!

うまくいきました。

2007/06/26 10:55:49
id:chuken_kenkou No.2

chuken_kenkou回答回数722ベストアンサー獲得回数542007/06/22 20:20:19

ポイント30pt

distinctを使う方法

select distinct data from 表名

group byを使う方法

select data from 表名
 group by data

MySQLは、以下のように書いても文法エラーになりません。

select id,data from 表名
 group by data

これはMySQLの拡張仕様であり、data列でグループ化した結果、id列も一意になる場合にだけ記述を許され、そうでないなら結果は保証されません。

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.7.3 非表示のフィールドに対する GROUP BY

id:zachouR

ありがとうございます、非常に参考になりました。

2007/06/26 10:56:06
id:kn1967 No.3

kn1967回答回数2915ベストアンサー獲得回数3012007/06/22 20:30:13

ポイント30pt

(1)dataの一覧を得るには

SELECT data FROM テーブル名 GROUP BY data

http://dev.mysql.com/doc/refman/4.1/ja/group-by-functions.html


以下余談ですが、

(2)最大のidを求めるには

降順に並べて(ORDER BY id DESC)

一番最初のレコードだけを得る(LIMIT 1)

SELECT id FROM テーブル名 ORDER BY id DESC LIMIT 1

(3)AAA、BBB、CCCそれぞれの中で最大のidを得るには

SELECT data,MAX(id) FROM テーブル名 GROUP BY data
id:zachouR

最大のIDを得るには、MAXを使おうと思っています。(他の質問で答えがでていたので)

このやり方の場合、MAX、MINを使うのとどちらがいいのでしょうか?

(3)は使うことがありそうです、ありがとうございます。

2007/06/26 10:58:08
  • id:kn1967
    昨今のパソコンの性能だと
    個人的利用の範囲(多くても10万件程度でしょう)であれば体感速度的に変わったりしませんので
    直感的で判りやすいMAXやMINを使うとよろしいでしょう。

    ORDER BY と LIMIT による方法だとトップ10とか、トップ11~30などといった情報も簡単に得る事が出来ますので+αとしてご記憶くださいませ。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません