функции max () - PullRequest
       19

функции max ()

0 голосов
/ 04 марта 2011

Я создаю следующую таблицу.

create table man(id integer, name varchar(20), city varchar(20), age integer)

Я хочу найти имя человека с максимальным возрастом.

Итак, я выполнил следующий запрос,

select name, max(age) from man group by name;

Показывает имена всех людей в порядке возрастания с возрастом.Что не так?

Ответы [ 5 ]

2 голосов
/ 04 марта 2011

Если вы хотите получить человека с большим возрастом, вы можете сделать:

select name, age from man order by age desc limit 1;

Для запроса, работающего с SQL Server:

select top 1 name, age from man order by age desc;

Ваш запрос делает что-то еще. max использует ваше предложение group для своих вычислений. Поскольку вы группируете по имени, max(age) - это максимальный возраст для людей с таким же именем.

1 голос
/ 04 марта 2011

Я изо всех сил пытаюсь понять, что ты здесь делаешь.У человека может быть более одного возраста в вашей модели?

В любом случае.Если вам нужен максимальный возраст в таблице man, вам нужно выполнить:

select max(age) from man

А кто это?Если вы добавите name к запросу, механизм БД вернет все имена (так как вы запросили их все, а не конкретное; группировка не поможет, так как большинство имен уже распознаны) в сочетании с макс.значение столбца age.

Вам нужен подзапрос:

select m1.name
from man m1
where m1.age = (
    select max(m2.age)
    from man m2
)

Здесь выбираются все элементы, возраст которых совпадает с наивысшим возрастом в наборе.

0 голосов
/ 04 марта 2011
  SELECT NAME, AGE
    FROM MAN
GROUP BY NAME, AGE
  HAVING AGE = (SELECT MAX (AGE) FROM MAN)
0 голосов
/ 04 марта 2011

выберите имя.макс (возраст) от человека по имени;

Должно быть

ВЫБРАТЬ имя, макс. (Возраст) ОТ man GROUP BY name;

Вы также можете попробовать

ВЫБРАТЬ имя, возраст ОТ man ORDERBY age DESC

Может быть, немного больше информации о ожидаемых результатах будет полезным?

0 голосов
/ 04 марта 2011

Для каждого имени указывается максимальный возраст всех людей с таким именем.(Это то, что вы просили, не так ли?)

...