人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

以下の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

●質問者: hopefully
●カテゴリ:就職・転職 コンピュータ
✍キーワード:AS dB h1 H2 SELECT
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● くいっぱ
●60ポイント

テーブル構成が把握しかねるのですが、抽出条件で重複してしまう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;


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

◎質問者からの返答

駄目ですね。

以下が実行結果です。

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


2 ● くいっぱ
●10ポイント

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

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




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レコード抽出したいのかと思ったのですが、もしかしてこのような事をご要望でしたでしょうか??

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ