У меня есть таблица тест SQLite для хранения данных отчетов со значениями:SQLite HAVING ошибки сравнения
CREATE TABLE IF NOT EXISTS "test_fact_daily_revenue" (
"date" TEXT,
"revenue" NUMERIC,
"product" TEXT
);
INSERT INTO "test_fact_daily_revenue"
("date", "revenue", "product")
VALUES
('2014-01-01', 3, 'Nerds'),
('2014-01-01', 2, 'Laffy Taffy'),
('2014-01-02', 1, 'Smarties'),
('2014-01-02', 5, 'Laffy Taffy'),
('2014-01-03', 0.5, 'Smarties'),
('2014-01-03', 1, 'Skittles');
Я проверить, что столбец выручки понимается числовое/целое число, и что в сравнении с использованием колонки дохода работает правильно:
SELECT
typeof(SUM(revenue)) AS revenue,
typeof(product) AS product
FROM test_fact_daily_revenue
WHERE revenue > 1
GROUP BY product;
integer|text
integer|text
Но когда я пытаюсь сделать HAVING условие с использованием агрегата (SUM) столбца доходов, результат неверен. 7 не меньше 5.
SELECT
test_fact_daily_revenue.product AS "product",
SUM(test_fact_daily_revenue.revenue) AS "revenue"
FROM "test_fact_daily_revenue"
WHERE
"test_fact_daily_revenue"."product" IS NOT NULL
GROUP BY "test_fact_daily_revenue"."product"
HAVING
SUM(test_fact_daily_revenue.revenue) < 5
Laffy Taffy|7
Nerds|3
Skittles|1
Smarties|1.5
Если я повторить тот же тест с MySQL, он работает, как ожидалось, отфильтровывая строки Laffy Таффи. Есть ли хорошее объяснение этому?
Ваш запрос выглядит правильно: я не могу воспроизвести вашу проблему: http://sqlfiddle.com/# ! 5/c1426/1 – sgeddes
Я использую PHP 5.6 PDO 'sqlite' engine с файлом базы данных ': memory:'. Возможно, это проблема с версией. –
Кроме того, если я изменяю предложение HAVING как 'SUM (test_fact_daily_revenue. доход)> 5', я не получаю строк назад. –