以下sql,在WHERE子句中使用MAX聚合函数,不起作用:
SELECT
ID,
title,
relevance
FROM
myTable
WHERE
(relevance <= MAX(relevance)/2)
有人能指出我正确的方向吗? myTable是一个临时表,因此无法使用子查询再次引用。谢谢!
答案 0 :(得分:3)
尝试使用sub query
SELECT
ID,
title,
relevance
FROM
myTable
WHERE
(relevance <= (SELECT MAX(relevance)/2 FROM myTable))
使用类似
的另一种方式SELECT
ID,
title,
relevance
FROM
myTable
GROUP BY ID
HAVING
(relevance <= MAX(relevance)/2)
答案 1 :(得分:3)
SET @MaxRel=(SELECT MAX(relevance)/2 FROM myTable);
SELECT ID,title,relevance FROM myTable WHERE (relevance <= @MaxRel);
愿这个帮助
答案 2 :(得分:0)
您需要使用子查询
SELECT
ID,
title,
relevance
FROM
myTable
WHERE
(relevance <= (SELECT MAX(relevance) FROM myTable) /2)
答案 3 :(得分:0)
你应该可以做这样的事情。 (未经测试,如果这不能按预期工作,请告诉我。)
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
;
Common MySQL Queries了解一些优秀的代码示例。查看组内配额(每组前N个),以获取如何在查询中使用变量的示例,如上所示。
答案 4 :(得分:0)
使用naresh提到的变量的方法是查询数据库的好方法, 因为它使人们更容易理解查询。
答案 5 :(得分:0)
SELECT
ID,
title,
relevance
FROM
myTable inner join (SELECT MAX(relevance) as maxRel FROM myTable) A
WHERE
(relevance <= (A.maxRel / 2))
仍然可以返回与之前相同的行数,因为“A”只有一行。