[pgsql-jp: 37424] Re: 一部のデータを SELECT した際に全体の順位取得

TANAKA Masayuki tanakamasayuki @ gmail.com
2006年 8月 18日 (金) 01:07:08 JST


こんばんは田中です

私はPHP上で配列に追加しちゃいます

$list = array();
while( $row = $res->fetchRow( DB_FETCHMODE_ASSOC ) )
{
	$row['start_times1'] = time_str( $row['start_time1'] );
	$row['start_times2'] = time_str( $row['start_time2'] );
	$row['start_times3'] = time_str( $row['start_time3'] );
	$row['end_times1'] = time_str( $row['end_time1'] );
	$row['end_times2'] = time_str( $row['end_time2'] );
	$row['end_times3'] = time_str( $row['end_time3'] );
	$row['recesss'] = time_str( $row['recess'] );
	$row['workings'] = time_str( $row['working'] );
	$list[] = $row;
}
$smarty->assign( 'list', $list );

SQLでやるよりは単純で早いはず。。。

田中

06/08/17 に whi te<white_wwjd @ yahoo.co.jp> さんは書きました:
> ご返信ありがとうございます。
>
> > 順位 =(自分より大きい points の人の数+1)と考える
> と、
>
> なるほど。
> 確かに順位ってそういう事ですね。
> 順位の意味(!?)を考えてみた事なかったですが、
> そういう風に考え直すと、SQL文が作成出来ますね。
> 勉強になりました。
>
> ただ、実際のデータってランキングテーブルに
> 同一人物のデータが複数存在します。
> ですので、例示して頂いたSQLを基に以下の様なSQL文を作成し
> てみたのですが、エラーが出てしまいます。
>
> COUNT/SUMしたデータを条件文に含む事は出来ないのでしょう
> か。
> ON句のSUMを試しに抜かしてみると、結果は違いますが、
> SQLはとおります。
>
> SELECT r1.name,r1.points,SUM(r2.points)+1 as rank
> FROM ランキング r1 LEFT JOIN ランキング r2 ON
> SUM(r1.points) < SUM(r2.points)
> GROUP BY r1.name,r1.points,r2.points
> ORDER BY rank DESC
>
> ERROR:  aggregates not allowed in JOIN conditions
>
>
>
>
>
> > 賀内と申します。
> >
> > > TABLE名:ランキング
> > >
> > > name|points
> > > -----------
> > > aa  |60
> > > bb  |80
> > > cc  |70
> > > dd  |40
> > > ee  |20
> > >
> > >
> > > SELECT * FROM ランキング OFFSET 2 LIMIT 2 ORDER BY
> points
> > > DESC;
> > >
> > > name|points
> > > aa  |60
> > > dd  |40
> > >
> > > が取得されると思いますが、「aa」が全体の何位かを取得
> する
> > > 事は出来ないでしょうか。
> > > 以下の様に取得するのが理想です。
> > >
> > > name|points|rank
> > > aa  |60    |3
> > > dd  |40    |4
> >
> > 順位 =(自分より大きい points の人の数+1)と考える
> と、
> >
> >  SELECT r1.name,r1.points,count(r2.*)+1 as rank
> >  FROM ランキング r1 LEFT JOIN ランキング r2 ON r1.points
> < r2.points
> >  GROUP BY r1.name,r1.points
> >  ORDER BY rank
> >
> > と書けますよ。
> > これだと OFFSET / LIMIT も使えるし、同じ points の人が
> いても大丈夫です。
> >
>



pgsql-jp メーリングリストの案内