以下のSQL文で、zyunというフィールドの値を

1にするためにはどうしたらできますか??
DBはPostgsqlです。
test=# select (select count(*) from rank h2 where h2.total_point>=h1.total_point and h2.jan_point=h1.jan_point) as zyun, total_point from rank h1 where total_point > '999' and jan_point='1' order by total_point limit 5;
zyun | total_point
------+-------------
2 | 10000
2 | 10000
(2 rows)

test=# select (select count(*) from rank h2 where h2.total_point>=h1.total_point and h2.jan_point=h1.jan_point) as zyun, total_point from rank h1 where jan_point='1' order by total_point limit 5;
zyun | total_point
------+-------------
2 | 10000
2 | 10000

回答の条件
  • 1人2回まで
  • 登録:2006/04/03 13:21:32
  • 終了:2006/04/03 18:17:15

回答(2件)

id:kuippa No.1

くいっぱ回答回数1030ベストアンサー獲得回数132006/04/03 15:38:24

ポイント60pt

テーブル構成が把握しかねるのですが、抽出条件で重複してしまうtotal_pointが二つあるのをひとつにしたいという要望でよろしいですか?

であれば、distinctを使えば1にはできますが…。



↓ このようなやり方になります。

test=# 
select 
	(select count(distinct(total_point)) 
	from rank h2 
	where 
		h2.total_point>=h1.total_point 
		and h2.jan_point=h1.jan_point
	) as zyun, 
	total_point 
from rank h1 
where total_point > '999' 
	and jan_point='1' 
order by total_point limit 5;
test=# 
select 
	(select count(distinct(total_point)) from rank h2 
	where h2.total_point>=h1.total_point 
	and h2.jan_point=h1.jan_point) as zyun
	, total_point 
from rank h1 
where jan_point='1' 
order by total_point limit 5;


やりたいことを少々つかみかねているので、そうじゃないよという場合はコメントください。

id:hopefully

駄目ですね。

以下が実行結果です。

test=# select (select count(distinct(total_point)) from rank h2 where h2.total_point>=h1.total_point and h2.jan_point=h1.jan_point) as zyun, total_point from rank h1 where total_point > '999' and jan_point='1' order by total_point limit 5;

zyun | total_point

------+-------------

2 | 5000

1 | 10000

1 | 10000

2006/04/03 16:58:18
id:kuippa No.2

くいっぱ回答回数1030ベストアンサー獲得回数132006/04/03 17:46:38

ポイント10pt

ご要望の形態とちがっていたようなので、二回目の回答です。

おやりになりたい事が、まだいまいち理解できていないため、複数の場合を想定してご回答しておきます。




10000に対するzyunを1にする以外に、total_pointが複数レコードあるようであれば、

h2.jan_point>=h1.jan_point

ではなく

h2.jan_point=h1.jan_point

とやられてはどうでしょうか??

test=# 
select 
	(select count(distinct(total_point)) 
	from rank h2 
	where 
		h2.total_point=h1.total_point 
		and h2.jan_point=h1.jan_point
	) as zyun, 
	total_point 
from rank h1 
where total_point > '999' 
	and jan_point='1' 
order by total_point limit 5;
zyun | total_point
------+-------------
1 | 5000
1 | 10000
1 | 10000

というような出力結果になるかとおもいます。


もしこの出力結果を下記のようにレコードを絞り込んで表示したい場合は、

zyun | total_point
------+-------------
1 | 5000
1 | 10000

単純に下記のようにやればいいかと思うのですが…



test=# 
select 
	count(distinct(total_point)) ,
	total_point 
from 
	rank h1 
where 
	total_point > '999' 
	and jan_point='1' 
group by 
	total_point
order by total_point limit 5;

countの部分をわざわざサブクエリにされていたので、2レコード抽出したいのかと思ったのですが、もしかしてこのような事をご要望でしたでしょうか??

  • id:kuippa
    質問を終了されたので解決されたのかもしれませんが、パカっとオープンしておきます。

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

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

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

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