忍者ブログ

初心者IT本部

いったい僕らの21世紀はどこに行くんだろう、で、ITってなに?

<< | 2024/05 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | >>

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。






LEFT OUTER JOIN で結合したcountのnullを0に換えてソート(OERDER BY)するには

 SNS(もどき)を作っていてLEFT OUTER JOINでくっつけたcountがnull
のときに0に置き換えたい、しかもそのcountでソートしたいと思ったわけ
です。

OUTER LEFT JOINについて・・・

 テーブルA,Bがあり、Aのレコード一つに対し、Bのレコード複数が
対応している場合、Aのカラムに並べてBの集計情報(sumやcount)を
表示したい場合がある。
ここでAに対応するレコードがBに必ずあるのならINNER JOIN(または
OUTER JOIN,普通の「JOIN」)でよいのだけれど、Aに対応するレコード
がBにあるかもしれないし、ないかもしれない場合、INNER JOINだとBに
対応レコードのないAのレコードが結果に表示されない。(僕の場合は、
Aにグループ情報があり、Bにそのグループに所属するメンバーの情報
があった。誰も入ってないグループの情報はBにはない。)
ここでOUTER LEFT JOINを使えば、Bに対応するAのレコードのBのカラム
は"null"になって出力される。

COALESCEについて・・・

 OUTER LEFT JOINでくっつけたcountの順(僕の場合だとグループの参加
人数順)にソートしようとしたらcountはnullを含んでいる場合がある。で
"ORDER BY count DESC"とするとnullが一番上に来る。それ以降は数字の降順。
(せめてnullが0の下ならいいんだけどね^^;)
なので、nullの代わりに0を入れてまとめてソートしたい。そういうときは

SELECT A.group_name,A.group_id,coalesce(count,0) FROM
group_info A LEFT OUTER JOIN (SELECT count(*),group_id FROM user_group_rel GROUP BY group_id ) AS foo ON A.group_id=foo.group_id
ORDER BY coalesce

 とする。副問い合わせの中でCOALESCEを使うとうまくいかない。
#これ、結構悩んだ。"COALESCE"って何語?

PR





AdminControlMenu: AdminMenu | NewEntry | EditComment | EditTrackback

忍者ブログ [PR]