「SQLアタマアカデミー 第3回 〜毒と薬は紙一重〜」

『WEB+DB PRESS Vol.47』に「SQLアタマアカデミー」第3回が掲載されました。今回は、これまでのピュア・SQL的な話と違って、ちょっと設計より、それもあまり行儀の良くない設計について集めたものです。私も設計よりの話するのは初めてなので、出来栄えはよく分からない。さてどんなもんでしょうか。

 今回は、まことに申し訳ありませんが、コードに間違いが幾つかあります。私の不手際で申し訳ありません。以下のとおり訂正させていただきます。こんな不注意なミスをしてしまうとは、なっていない。


1.リスト1のSQL。正しくは以下のとおり(MASTER.code_type = 'pref_cd'の条件
はWHERE句に書く必要がある)。
SELECT MASTER.code_value AS pref_cd,
MASTER.code_description AS pref_name,
DATA.population AS pop
FROM OTLT MASTER LEFT OUTER JOIN DataPop DATA
ON MASTER.code_value = DATA.pref_cd
WHERE MASTER.code_type = 'pref_cd';

2.p.151のSQL(列持ちの場合)。正しくは以下のとおり(act_nbrの後のカンマは
不要)。
SELECT act_nbr
FROM AccountsCols
WHERE amt_2006 >= 100000
AND amt_2007 >= 100000
AND amt_2008 >= 100000;

3.p.151のSQL(行持ちの場合)。
正しくは以下のとおり(HAVING句の条件にSUMが抜けていた)。
SELECT act_nbr
FROM AccountsRows
GROUP BY act_nbr
HAVING COUNT(*) = SUM(CASE WHEN amt >= 100000
THEN 1
ELSE 0 END);

追記:
サンプルコードと演習問題の解答は、技術評論社のサイトからダウンロードできます。こちらのサンプルコードのファイルは、正しいものに差し替えられています。