2010-11-03 88 views
2

以下SQL,与WHERE子句中的MAX都汇集功能,不工作:MAX()在WHERE子句

SELECT 
    ID, 
    title, 
    relevance 

    FROM 
    myTable 

    WHERE 
    (relevance <= MAX(relevance)/2) 

任何人都可以点我在正确的方向? myTable是一个临时表,因此不能使用子查询重新引用。谢谢!

回答

3
SET @MaxRel=(SELECT MAX(relevance)/2 FROM myTable); 
SELECT ID,title,relevance FROM myTable WHERE (relevance <= @MaxRel); 

愿这帮助

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) 
+0

不幸myTable的是一个临时表,所以只能在同一个查询 – Travis 2010-11-03 06:08:36

+0

一次提到修改我的答案是否溶液2是工作 – 2010-11-03 06:13:41

+0

HAVING子句是一个聚合一个地方,这将是正确的答案 – Leslie 2010-11-03 13:48:26

0

您需要使用子查询

SELECT 
    ID, 
    title, 
    relevance 
FROM 
    myTable 
WHERE 
    (relevance <= (SELECT MAX(relevance) FROM myTable) /2) 
+0

感谢您的快速响应。不幸的是,myTable是一个临时表,所以在同一个查询中不能被引用2x – Travis 2010-11-03 06:13:03

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),如上所示。

0

使用由naresh提到的变量的方法是查询数据库的好方法,因为它可以轻松理解查询。

0
SELECT 
    ID, 
    title, 
    relevance 
FROM 
    myTable inner join (SELECT MAX(relevance) as maxRel FROM myTable) A 
WHERE 
    (relevance <= (A.maxRel/2)) 

还是应该让你回到与之前相同的行数,因为“A”只有一行。