[前][次][番号順一覧][スレッド一覧]

mysql:15336

From: 遠藤 俊裕 <遠藤 俊裕 <endo@xxxxxxxxxx>>
Date: Tue, 08 Jun 2010 10:45:56 +0900
Subject: [mysql 15336] Re: 【お知恵拝借】副問い合わせに limit 3

遠藤です。

こんな感じです。
カテゴリの 2 が出ない・・・

drop table tbl;

create table tbl
(
id int auto_increment primary key,
  field int,
  ordfield int
);

INSERT INTO `tbl` 
(`id`, `field`, `ordfield`) VALUES 
(NULL, '0', '1'), (NULL, '1', '11'), (NULL, '2', '1'),
(NULL, '0', '2'), (NULL, '1', '22'), (NULL, '2', '1'),
(NULL, '0', '3'), (NULL, '1', '33'), (NULL, '2', '1'),
(NULL, '0', '4'), (NULL, '1', '44'), (NULL, '2', '1');

SELECT t1.id, t1.field, t1.ordfield
FROM tbl t1
INNER JOIN tbl t2 ON t1.field = t2.field AND t1.ordfield >= t2.ordfield
GROUP BY t1.field, t1.ordfield, t1.id
HAVING count(*) <= 3;

Tue, 8 Jun 2010 06:55:52 +0900 (JST) に、
"KIMURA, Meiji" <kimura804@xxxxxxxxxx> さんは書きました:

> 木村です。
> 
> --- 遠藤 俊裕 <endo@xxxxxxxxxx> wrote:
> 
> > 遠藤です。
> > 
> > これ、ordfield が同一の時、どうなりますかね?
> > なんか、変な動きしますかね・・・・
> > なんか、変っぽい・・・
> 
> INSERT INTO `carelabo_portal`.`tbl` 
> (`id`, `field`, `ordfield`) VALUES 
> (NULL, '0', '1');
> 
> +----+-------+----------+
> | id | field | ordfield |
> +----+-------+----------+
> |  1 |     0 |        1 |
> |  4 |     0 |        2 |
> | 13 |     0 |        1 |←ここがヘン?
> |  2 |     1 |       11 |
> |  5 |     1 |       22 |
> |  8 |     1 |       33 |
> |  3 |     2 |       55 |
> |  6 |     2 |       66 |
> |  9 |     2 |       77 |
> +----+-------+----------+
> 9 rows in set (0.00 sec)
> 
> 一行増やすとこんな感じですね。あらgroup byの順番間違ってました。
> field, ordfield, idの順にしないとだめですね。修正するとこんな感じです。
> 
> mysql> SELECT t1.id, t1.field, t1.ordfield
>     -> FROM tbl t1
>     -> INNER JOIN tbl t2 ON t1.field = t2.field AND t1.ordfield >= t2.ordfield
>     -> GROUP BY t1.field, t1.ordfield, t1.id
>     -> HAVING count(*) <= 3;
> +----+-------+----------+
> | id | field | ordfield |
> +----+-------+----------+
> |  1 |     0 |        1 |
> | 13 |     0 |        1 |
> |  4 |     0 |        2 |
> |  2 |     1 |       11 |
> |  5 |     1 |       22 |
> |  8 |     1 |       33 |
> |  3 |     2 |       55 |
> |  6 |     2 |       66 |
> |  9 |     2 |       77 |
> +----+-------+----------+
> 9 rows in set (0.00 sec)
> 
> > Tue, 8 Jun 2010 00:06:41 +0900 (JST) に、
> > "KIMURA, Meiji" <kimura804@xxxxxxxxxx> さんは書きました:
> > 
> > > こんばんわ、木村です。
> > > 
> > > 自己結合とgroup by, havingでこんなんでどうですかね。
> > > 
> > > mysql> SELECT t1.id, t1.field, t1.ordfield
> > >     -> FROM tbl t1
> > >     -> INNER JOIN tbl t2 ON t1.field = t2.field AND t1.ordfield >= t2.ordfield
> > >     -> GROUP BY t1.field, t1.id, t1.ordfield
> > >     -> HAVING count(*) <= 3;
> > > +----+-------+----------+
> > > | id | field | ordfield |
> > > +----+-------+----------+
> > > |  1 |     0 |        1 |
> > > |  4 |     0 |        2 |
> > > |  7 |     0 |        3 |
> > > |  2 |     1 |       11 |
> > > |  5 |     1 |       22 |
> > > |  8 |     1 |       33 |
> > > |  3 |     2 |       55 |
> > > |  6 |     2 |       66 |
> > > |  9 |     2 |       77 |
> > > +----+-------+----------+
> > > 9 rows in set (0.00 sec)
> > > 
> > > ただパフォーマンスは、これだとあまり良さそうにないですが。。。。。
> > > 
> > > --- 遠藤 俊裕 <endo@xxxxxxxxxx> wrote:
> > > 
> > > > えんどうです。
> > > > お返事有り難うございました。
> > > > 
> > > > create table tbl
> > > > (
> > > > id int auto_increment primary key,
> > > >   field int,
> > > >   ordfield int
> > > > );
> > > > 
> > > > INSERT INTO `carelabo_portal`.`tbl` 
> > > > (`id`, `field`, `ordfield`) VALUES 
> > > > (NULL, '0', '1'), (NULL, '1', '11'), (NULL, '2', '55'),
> > > > (NULL, '0', '2'), (NULL, '1', '22'), (NULL, '2', '66'),
> > > > (NULL, '0', '3'), (NULL, '1', '33'), (NULL, '2', '77'),
> > > > (NULL, '0', '4'), (NULL, '1', '44'), (NULL, '2', '88');
> > > > 
> > > > で、実行した時、
> > > > 
> > > > 1, 0, 1
> > > > 4, 0, 2
> > > > 7, 0, 3
> > > > 2, 1, 11
> > > > 5, 1, 22
> > > > 8, 1, 33
> > > > 3, 2, 55
> > > > 6, 2, 66
> > > > 9, 2, 77
> > > > 
> > > > (おそらく)上記が出て欲しいです。
> > > > データがダミーなので、おそらくと書きましたが、なんせ、グ
> > > > ループ(field)毎に(ordfiledの)トップ3が出れば嬉しい
> > > > のです。
> > > > 
> > > > 今は、3回 SQL を( field 毎に)発行して、プログラムでがっ
> > > > ちゃんこしてます。ちょっと、不細工・・・(^^;
> 
> 
> 
> --
> キムラデービー代表 木村明治(KIMURA, Meiji)
> http://kimuradb.com
> [News] 2009/12/10(木) Firebird徹底入門発売!現在絶賛販売中!!
> http://www.amazon.co.jp/exec/obidos/ASIN/4798119636/kimuradb-22
> 

--
えんどう
endo@xxxxxxxxxx,endo@xxxxxxxxxx


[前][次][番号順一覧][スレッド一覧]

     15328 2010-06-07 21:41 [遠藤 俊裕 <endo@xxxx] 【お知恵拝借】副問い合わせに limit 3    
     15329 2010-06-07 22:00 ┗[Miyata Masaki <catlo]                                       
     15330 2010-06-07 22:33  ┗[遠藤 俊裕 <endo@xxxx]                                     
     15331 2010-06-08 00:06   ┣["KIMURA, Meiji" <kim]                                   
     15334 2010-06-08 01:48   ┃┗[遠藤 俊裕 <endo@xxxx]                                 
     15335 2010-06-08 06:55   ┃ ┗["KIMURA, Meiji" <kim]                               
->   15336 2010-06-08 10:45   ┃  ┗[遠藤 俊裕 <endo@xxxx]                             
     15337 2010-06-08 13:54   ┃   ┣[SAKAI Kei <sak2@xxxx]                           
     15338 2010-06-08 15:28   ┃   ┃┣[遠藤 俊裕 <endo@xxxx]                         
     15339 2010-06-08 21:56   ┃   ┃┗["KIMURA, Meiji" <kim]                         
     15340 2010-06-08 23:00   ┃   ┗["KIMURA, Meiji" <kim]                           
     15332 2010-06-08 00:47   ┣[SAKAI Kei <sak2@xxxx]                                   
     15333 2010-06-08 01:16   ┗[遠藤 俊裕 <endo@xxxx]