WHERE子句中的MAX()

时间:2010-11-03 06:00:14

标签: php sql mysql aggregate-functions

以下sql,在WHERE子句中使用MAX聚合函数,不起作用:

  SELECT 
   ID,
   title, 
   relevance

  FROM
   myTable

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

有人能指出我正确的方向吗? myTable是一个临时表,因此无法使用子查询再次引用。谢谢!

6 个答案:

答案 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”只有一行。