Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Вложенный запрос в COUNT() (fAL) 24/09/2008 - 17:49:13
      Re: Вложенный запрос в COUNT() (bac) 25/09/2008 - 12:08:19

> Original message text:
> From: fAL - 24/09/2008 - 17:49:13
> Subject:Вложенный запрос в COUNT()
> -----------------
> Есть таблица имя, возраст.
> Нужно для каждого имени определить число людей моложе его.
> Пытаюсь:
> SELECT T1.name, COUNT(SELECT * FROM tablename AS T2 WHERE T2.age<T1.age) FROM tablename AS T1;
>
> Говорит ошибка синтаксиса.
>


From: bac - 25/09/2008 - 12:08:19
Subject:Вложенный запрос в COUNT()
-----------------
Я конечно такого синтаксиса ни разу не встречал. А вот решение вашей задачи. Только учтите, если записей в базе данных много, то количество записей в промежуточной выборке будем не на много меньше чем квадрат количества записей. Так если у вас 100 то в промежуточной будет примерно 100*100 = 10000. Поэтому можно ожидать достаточно большой задержки по времени решения указанной задачи. И еще желательно иметь индекс по полю age. И еще одно в базе данных лучше хранить не возаст а дату рожденья. Т.к. время идет и меняется возраст. (Но как всегда хозяин - барин).

CREATE TABLE IF NOT EXISTS people (
id INTEGER AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30),
age INTEGER
);

INSERT INTO people (name, age) VALUES
('Петров', 32),
('Орлов', 33),
('Соколов', 33),
('Хохлов', 28),
('Курманов', 32);

SELECT a.name, SUM(IF(b.id IS NOT NULL, 1, 0)) cnt
FROM people a LEFT JOIN people b ON (a.age>b.age)
GROUP BY a.id
ORDER BY a.name;


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
34148



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |