SQLite TIENE error de comparación

Tengo una tabla SQLite de testing para almacenar datos de informes con valores:

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'); 

Estoy verificando que se entiende que la columna de ingresos es numérica / entera y que una comparación usando la columna de ingresos funciona correctamente:

 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 

Pero cuando bash hacer una cláusula HAVING usando un agregado (SUM) de la columna de ingresos, el resultado es incorrecto. 7 no es less de 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 

Si repito exactamente la misma testing con MySQL, funciona como se esperaba, filtrando la fila de Laffy Taffy. ¿Hay una buena explicación para esto?

¡Es un problema con el controller PHP PDO y las declaraciones preparadas! La siguiente statement preparada no funciona si el parámetro enlazado es un flotante PHP, porque PHP solo puede vincularlo como INTEGER o STRING (y string es el tipo de parámetro recomendado para decimales). Debido a que mi columna puede tener valores DECIMAL, la biblioteca que estoy utilizando lo vincula como STRING. SQLite tiene comportamientos extraños para las comparaciones de cadenas, incluso si son numéricas. Para evitarlo, voy a tener que evitar declaraciones preparadas … 🙁

 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) < ?