|
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,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
34148
|
|