
お世話になります。
MYSQLにて以下のようなtableがあるとします。
id ex_id name count flag time memo
1 1 山田 100 on 10:11 テスト
2 1 山田 80 on 10:12 テスト2
3 2 田中 50 on 10:13 テスト3
4 3 鈴木 30 on 10:14 テスト4
5 3 鈴木 110 on 10:14 テスト5
6 3 鈴木 10 on 10:14 テスト6
このうち、countの数字が高いものから表示したいのですが、
ex_idが重複する場合はその数字が最も高いもののみ表示したく考えています。
目的とした表示結果順は以下です。
id ex_id name count flag time memo
5 3 鈴木 110 on 10:14 テスト5
1 1 山田 100 on 10:11 テスト
3 2 田中 50 on 10:13 テスト3
distinctやgroup byなど色々考えてみたのですが、思ったような挙動になりませんでした。
以上、よろしくお願い致します。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
select * from tbl t1
where count =
(select max(count) from tbl t2 where t1.ex_id = t2.ex_id)
order by count desc
ではどうでしょう?
No.3
- 回答日時:
ex_id, countでindexを作ればどうなるでしょう?
No.2
- 回答日時:
#1さんの補足ですが、とくにconcatする必要はありません
create table tbl(id int,ex_id int,name varchar(20),count int,flag set('on','off') default 'on',timex time,memo text);
insert into tbl values(1,1,'山田',100,'on','10:11','テスト'),(2,1,'山田',80,'on','10:12','テスト2'),(3,2,'田中',50,'on','10:13','テスト3'),(4,3,'鈴木',30,'on','10:14','テスト4'),(5,3,'鈴木',110,'on','10:14','テスト5'),(6,3,'鈴木',10,'on','10:14','テスト6');
select * from tbl
where (ex_id,count) in
(select ex_id,max(count) from tbl group by ex_id)
order by count desc
回答ありがとうございます。
処理としまして、サンプル程度のデータ数なら良いのですが、30,000件程度あるテーブルで実行すると重すぎてダウンしてしまうようです。
limitを10程度にしてみても、実行時間が10秒近くかかってしまいました。
何か良い方法は無いでしょうか?
No.1
- 回答日時:
DB2ですと、こうなります。
I:\>db2 select * from Mysql
ID EX_ID NAME COUNT FLAG TIME MEMO
-- ----- ---------- ----------- ---- ----- --------------------
1 1 山田 100 on 10:11 テスト
2 1 山田 80 on 10:12 テスト2
3 2 田中 50 on 10:13 テスト3
4 3 鈴木 30 on 10:14 テスト4
5 3 鈴木 110 on 10:14 テスト5
6 3 鈴木 10 on 10:14 テスト6
6 レコードが選択されました。
I:\>db2 select * from Mysql where concat(ex_id, count) in(select distinct concat(ex_id, max(count)) from Mysql group by ex_id) order by count desc
ID EX_ID NAME COUNT FLAG TIME MEMO
-- ----- ---------- ----------- ---- ----- --------------------
5 3 鈴木 110 on 10:14 テスト5
1 1 山田 100 on 10:11 テスト
3 2 田中 50 on 10:13 テスト3
3 レコードが選択されました。
concatがあればいいのですが・・・
回答ありがとうございます。
処理としまして、サンプル程度のデータ数なら良いのですが、30,000件程度あるテーブルで実行すると重すぎてダウンしてしまうようです。
limitを10程度にしてみても、実行時間が10秒近くかかってしまいました。
何か良い方法は無いでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のDB(Table)からの複数行の...
-
同じサーバーで、異なるデータ...
-
Unionした最後にGROUP BYを追加...
-
【SQL文】Insert into文で文法...
-
[MySQL] 1対多のリレーションで...
-
DB設計について
-
MySQLにてCOUNTした値を更にCOUNT
-
レコード数が増えすぎた場合の対処
-
カラム名でseqとidではどちらが...
-
同一のユーザー、同一商品のと...
-
エクセルの関数について教えて...
-
エクセルで最後の文字だけ置き...
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
Access パラメータクエリをcsv...
-
SQLサーバから、項目の属性(型...
-
[MySQL] UNIQUE制約の値を更新...
-
SQLにて特定の文字を除いた検索...
-
VIEWの元のテーブルのindexって...
-
1テーブル&複数レコードの更新...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
マイクラPC版のコマンドで効率...
-
【Transact-sql】 execの結果を...
-
sqlで、600行あるテーブルを100...
-
SQLにて特定の文字を除いた検索...
-
1テーブル&複数レコードの更新...
-
PL/SQLの変数について
-
WordpressのContact form 7でzi...
-
複数テーブルのGROUP BY の使い...
-
バインド変数について
-
inner joinをすると数がおかし...
-
MySQLのint型で001と表示する方...
-
updateを1行ずつ実行したい。
おすすめ情報