Проблема с вашим кодом заключается в следующем:
THEN 'id'
Вы используете агрегатную функцию SUM()
и суммируете по строковому литералу, например 'id'
, который неявно преобразуется в 0
(потому что он не может быть преобразован в число), поэтому результат равен 0
. Даже если вы удалите одинарные кавычки, вы не получите желаемый результат, потому что вы получите сумму id
s. Но если бы вы использовали:
THEN 1 ELSE 0
, то вы получите правильный результат. Но с SQLite вы можете написать это проще:
SELECT SUM(strftime('%m', oDate) = '04') FROM orders;
без выражения CASE
. Или, поскольку вы просто хотите посчитать заказы, тогда COUNT()
сделает это:
SELECT COUNT(*) FROM orders WHERE strftime('%m', oDate) = '04';
Редактировать. Если вы хотите посчитать заказы за все месяцы, группируйте по месяцам:
SELECT strftime('%Y-%m', oDate) AS month,
COUNT(*) AS number_of_orders
FROM orders
GROUP BY month;