SQLite HAVING 比较错误

标签 sql sqlite

我有一个测试 SQLite 表,用于存储带有值的报告数据:

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

但是当我尝试使用收入列的聚合 (SUM) 执行 HAVING 子句时,结果不正确。 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 Taffy 行。有没有好的解释?

最佳答案

这是 PHP PDO 驱动程序和准备好的语句的问题!如果绑定(bind)参数是 PHP float ,则以下准备好的语句不起作用,因为 PHP 只能将其绑定(bind)为 INTEGER 或 STRING(字符串是建议的小数参数类型)。因为我的列可能有 DECIMAL 值,所以我使用的库将其绑定(bind)为 STRING。 SQLite 对于字符串比较有奇怪的行为,即使它们是数字。为了解决这个问题,我必须避免使用准备好的语句......:-(

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

关于SQLite HAVING 比较错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38105900/

相关文章:

javascript - Jquery从sqlite数据库获取西类牙口音时显示�符号

ios - 启动swift后复制数据库

javascript - 在javascript中动态检索值

php - 如何仅存储月份和年份并将所有日期的日期默认设置为 1?

mysql - 如何在 MS sql 中显示类似于 11111 或类似的数字

sql - 失败:执行错误,在访问Hive View 时从org.apache.hadoop.hive.ql.exec.mr.MapRedTask异常返回代码2

c# - 为什么我的 Xamarin.Forms 应用程序在从 Web API 将数据插入 SQLite 数据库后崩溃?

sql - 将动态查询结果插入到未定义的临时表中?

mysql - 选择提供完全相同部分 : 的 sid 对的查询

ruby-on-rails - Fresh Rails 应用程序默认使用 Postgres 而不是 SQLite3