日付の表を使用して、週に基づいてさまざまな列を数えようとしています。私はなんとか1つの列でそれを行うことができ、うまく機能します。しかし、複数の列を数えていると、間違った結果または重複した結果が得られます。加入したからだと思います。
これは、期待どおりに 1 つの列に対して機能します。
SELECT
DATE_FORMAT(thedate, '%u') as week
,COUNT(t.completed_date) as completed
FROM datetable
LEFT JOIN projects t ON t.completed_date = thedate
WHERE thedate BETWEEN YEAR(NOW()) AND NOW()
GROUP BY YEARWEEK(thedate,7)
選択に追加,COUNT(t.sales_date) as sales
することで、完了数と販売数が重複します。
このサンプル (プロジェクト) に基づく
| id | completed_date | sales_date |
| 1 | NULL | NULL |
| 2 | NULL | 2013-08-26 |
| 3 | NULL | 2013-08-28 |
| 4 | 2013-09-06 | NULL |
を探しています
| week | completed | sales |
| 34 | 0 | 0 |
| 35 | 0 | 2 |
| 36 | 1 | 0 |
日付がない場合、すべての日付が 0 である必要があるため、日付テーブルを使用しています。サブクエリで解決できると思いますが、このクエリでもカウントする必要がある他の 12 の日付フィールドがあります (サンプルから除外されています)。
多くのサブクエリを使用するよりも、これを解決するためのより良い方法はありますか? 私のSQLは少し錆びています。