新品価格 |
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