首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite存在比较错误

SQLite存在比较错误
EN

Stack Overflow用户
提问于 2016-06-30 01:00:37
回答 1查看 341关注 0票数 2

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

代码语言:javascript
复制
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');

我正在验证“收入”列是否理解为数字/整数,以及使用“收入”列的比较是否正确:

代码语言:javascript
复制
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。

代码语言:javascript
复制
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行。对此有什么好的解释吗?

EN

回答 1

Stack Overflow用户

发布于 2016-06-30 02:11:52

这是PHP PDO驱动程序和准备好的语句的问题!如果绑定参数是PHP浮点型,则以下准备好的语句不起作用,因为PHP只能将其绑定为整数或字符串(而字符串是小数的推荐参数类型)。因为我的列可以有十进制值,所以我使用的库将它绑定为字符串。SQLite对于字符串比较有奇怪的行为,即使它们是数字的。为了绕过它,我不得不避免准备好的语句...:-(

代码语言:javascript
复制
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) < ?
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38105900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档