MAX () в предложении WHERE - PullRequest
       2

MAX () в предложении WHERE

2 голосов
/ 03 ноября 2010

Следующий sql с функцией агрегирования MAX в предложении WHERE не работает:

  SELECT 
   ID,
   title, 
   relevance

  FROM
   myTable

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

Кто-нибудь может указать мне правильное направление? myTable - это временная таблица, поэтому на нее нельзя ссылаться снова, используя подзапрос. Спасибо!

Ответы [ 6 ]

3 голосов
/ 03 ноября 2010
SET @MaxRel=(SELECT MAX(relevance)/2 FROM myTable);
SELECT ID,title,relevance FROM myTable WHERE (relevance <= @MaxRel);

Пусть это поможет

3 голосов
/ 03 ноября 2010

попробуйте использовать подзапрос

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 голосов
/ 04 ноября 2010
SELECT 
    ID,
    title, 
    relevance
FROM
    myTable inner join (SELECT MAX(relevance) as maxRel FROM myTable) A
WHERE
    (relevance <= (A.maxRel / 2))

По-прежнему должно возвращать то же количество строк, что и раньше, так как "A" имеет только одну строку.

0 голосов
/ 03 ноября 2010

метод использования переменной, упомянутой naresh, - это хороший способ сделать запрос к базе данных, поскольку он облегчает понимание запросов.

0 голосов
/ 03 ноября 2010

Вы должны быть в состоянии сделать что-то подобное. (Не проверено, поэтому, пожалуйста, дайте мне знать, если это не работает, как ожидалось.)

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
;

Общие запросы MySQL за несколько хороших примеров кода. Ищите внутригрупповые квоты (наибольшее N на группу) для примера использования переменных в запросе, как показано выше.

0 голосов
/ 03 ноября 2010

Вам необходимо использовать подзапрос

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