2016年07月11日

SQLアンチパターン14章を読んだ

blogramランキング参加中!

SQLアンチパターン

新品価格
¥3,456から
(2016/7/11 20:12時点)



SQLアンチパターン13章を読んだ
の続編

14章は曖昧なグループ
以下、内容

・group byとmax
group byとmaxを混ぜると
曖昧な値かDBによってはエラーになる
select product_id, MAX(date_reported) as latest, bug_id
from bugs inner join bugsproducts using(bug_id)
group by product_id


・解決策1
not exitstを使う
select b1.product_id, b1.date_reported as latest, b1.bug_id
from bugs b1 inner join bugsproducts bp1 using(bug_id)
where not exist
(select * from bugs b2 inner join bugsproducts bp2 using(bug_id)
where bp1.product_id = bp2.product_id
and bp1.date_reported < bp2.date_reported)


・解決策2
最大のbug_idが最新のデータの場合
以下でいける
select product_id, MAX(date_reported) as latest, MAX(bug_id) as lateest_bug_id
from bugs inner join bugsproducts using(bug_id)
group by product_id


・解決策3
left outer joinする


・解決策4
group_concatを使う
これを使うとカンマ区切りで返却される



MAXとgroup idでハマる件も有名ですよね。
まだまだ続く
タグ:SQL
posted by マスタカ at 20:43 | Comment(0) | TrackBack(0) | | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック