Php WHERE子句中的MAX()
以下sql在WHERE子句中使用MAX aggregrate函数时不起作用:Php WHERE子句中的MAX(),php,sql,mysql,aggregate-functions,Php,Sql,Mysql,Aggregate Functions,以下sql在WHERE子句中使用MAX aggregrate函数时不起作用: SELECT ID, title, relevance FROM myTable WHERE (relevance <= MAX(relevance)/2) 谁能给我指出正确的方向吗?myTable是临时表,因此无法使用子查询再次引用。谢谢 尝试使用 另一种使用“喜欢”的方式 SELECT ID, title, re
SELECT
ID,
title,
relevance
FROM
myTable
WHERE
(relevance <= MAX(relevance)/2)
谁能给我指出正确的方向吗?myTable是临时表,因此无法使用子查询再次引用。谢谢 尝试使用
另一种使用“喜欢”的方式
SELECT
ID,
title,
relevance
FROM
myTable
GROUP BY ID
HAVING
(relevance <= MAX(relevance)/2)
您需要使用子查询
SELECT
ID,
title,
relevance
FROM
myTable
WHERE
(relevance <= (SELECT MAX(relevance) FROM myTable) /2)
希望这对你有所帮助。你应该能够做这样的事情。未经测试,请让我知道,如果这不是预期的工作
SELECT * FROM
(
SELECT
ID,
title,
relevance,
IF( relevance > @max, @max := relevance, @max := @max ) AS max_relevance
FROM
mytable,
(SELECT @max:=0) m
) Q
WHERE relevance <= max_relevance / 2
;
对于一些好的代码示例。查找组内配额Top N per group,了解如何在如上所示的查询中使用变量的示例。使用naresh提到的变量的方法是查询数据库的好方法, 因为它可以轻松地理解查询
SELECT
ID,
title,
relevance
FROM
myTable inner join (SELECT MAX(relevance) as maxRel FROM myTable) A
WHERE
(relevance <= (A.maxRel / 2))
仍应返回与以前相同的行数,因为A只有一行。不幸的是,myTable是一个临时表,因此只能在同一查询中引用一次HAVING子句是聚合上的where,这将是正确的答案使用通用表表达式而不是临时表。感谢您的快速响应。不幸的是,myTable是一个临时表,因此不能在同一查询中引用2x
SELECT * FROM
(
SELECT
ID,
title,
relevance,
IF( relevance > @max, @max := relevance, @max := @max ) AS max_relevance
FROM
mytable,
(SELECT @max:=0) m
) Q
WHERE relevance <= max_relevance / 2
;
SELECT
ID,
title,
relevance
FROM
myTable inner join (SELECT MAX(relevance) as maxRel FROM myTable) A
WHERE
(relevance <= (A.maxRel / 2))