23pt
色々ダメな気がする。
SELECT count(*),stores.name,stores.boss FROM stores JOIN books ON stores.id = books.store_id WHERE books.date BETWEEN '2007-02-01' AND '2007-02-15' GROUP BY books.store_id ORDER BY books.store_id;
こんなところ?
23pt
MySQL4系とのことですが、4.0と4.1では大幅な機能拡張がされています。どちらなのか、明記した方がいいと思います。
select count(*),stores.name,stores.boss from stores,books where store_id=stores.id and date(date) between '2007-02-01' and '2007-02-16' group by store_id;
質問中にあったSQL、及び上記のSQL例では、group byに関して、MySQLの独自機能を使用しています。MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 6.3.7.3 非表示のフィールドに対する GROUP BY
日付にdatetimeを使用していますが、時刻を入れることがあるのでしょうか?もし時刻が入るなら、上記SQLのように、date関数を使用する必要があります。時刻を入れないなら、「00:00:00」が仮定され、date関数は不要です。
ご回答ありがとうございます。
テスト機は3.23.58
実機は4.0でした。
22pt
「books.date > 2007-02-01 AND 2007-02-16 > books.date」の>を=> <を=<にしてテストしてみてください。(=蛾抜けていると思います)
22pt
SELECT COUNT(*),stores.name,stores.boss
FROM stores,books
WHERE stores.id = books.store_id
AND books.date BETWEEN '2007-2-1' AND '2007-2-16'
GROUP BY stores.name,stores.boss
HAVING COUNT(*) > 0 ;
前の人のを読むとJOINが使えないのかなと思うので。
もし使えたら、
SELECT COUNT(*),stores.name,stores.boss
FROM stores
INNER JOIN books
ON stores.id = books.store_id
WHERE books.date BETWEEN '2007-2-1' AND '2007-2-16'
GROUP BY stores.name,stores.boss
HAVING COUNT(*) > 0 ;
余談ですが、books.store_idに外部キー制約をつけないと、整合性が取れなくなる可能性があります。
ご回答ありがとうございます。早速ためしてみたところ、エラーがでてしまいました。
#1064 - You have an error in your SQL syntax near 'ON stores.id = books.store_id
WHERE books.date BETWEEN '2007-02-01' AND '2' at line 1