Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WHERE子句中的MAX()_Php_Sql_Mysql_Aggregate Functions - Fatal编程技术网

Php WHERE子句中的MAX()

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

以下sql在WHERE子句中使用MAX aggregrate函数时不起作用:

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