gpt4 book ai didi

mysql - 在使用我的 where 函数进行数学运算时,我的 mysql 查询出现语法错误

转载 作者:行者123 更新时间:2023-11-30 22:56:26 27 4
gpt4 key购买 nike

我试图从我的分数数据库中仅选择 1 和 5 的分数,按 productid 对这些分数进行分组,然后对这些分数进行一些数学运算以仅提取数量接近 1 和 5 的 productid分数。我的查询在下面,我在第 7 行遇到语法错误,但我不确定问题出在哪里。感谢您的帮助。

SELECT title, productid,
count(*) as total,
sum(case when score = '5.0' then 1 else 0 end) as high,
sum(case when score = '1.0' then 1 else 0 end) as low
FROM `reviews`
WHERE total > 0 AND
WHERE (`high` + `low`)/`total` > '.5' AND
WHERE abs((`high`-`low`)/`low`) <= '.1'
GROUP BY productid
ORDER BY total DESC;

最佳答案

您的查询问题似乎是和where。这在 SQL 中不存在。以下是编写查询的另一种方式:

SELECT title, productid, count(*) as total,
sum(score = 5.0) as high, sum(score = 1.0) as low
FROM `reviews`
WHERE total > 0 AND
(`high` + `low`)/`total` > 0.5 AND abs((`high`-`low`)/`low`) <= 0.1
GROUP BY productid
ORDER BY total DESC;

关于这个查询的一些说明:

  • 这简化了 sum() 但不使用 casecase 是正确的,可以很好地使用。 MySQL 恰好支持上述语法,因为 bool 值被视为整数,就像它们在 C 和 C++ 语言中一样(0 = false,1 = true)。
  • 数字常量不需要用单引号引起来。我认为将它们放在单引号中是个坏主意,因为它会产生误导。
  • 您对可能是 float 的值进行相等比较。这很危险。如果您的列被声明为小数,那么它应该没问题(小数是定点表示法)。

对于最后一点,您可能会考虑:

sum( abs(score - 5.0) < 0.0001 ) 

或者类似于处理非常接近 5 的值的东西。

编辑:

我没有注意到 where 子句区域中的列确实是别名。这意味着您需要一个 having 子句:

SELECT title, productid, count(*) as total,
sum(score = 5.0) as high, sum(score = 1.0) as low
FROM `reviews`
GROUP BY productid
HAVING total > 0 AND
(`high` + `low`)/`total` > 0.5 AND abs((`high`-`low`)/`low`) <= 0.1
ORDER BY total DESC;

关于mysql - 在使用我的 where 函数进行数学运算时,我的 mysql 查询出现语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26194795/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com