2010-11-03 110 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」只有一行。