|
Встроенный запрос
|
|||
---|---|---|---|
#18+
Есть база данных с таблицами скрин по ссылке Нужно сформировать запрос. Вывести фамилию тех клиентов, у которых возраст меньше среднего возраста всех клиентов. Я сделал в два запроса, как сделать с вложенным? Мой пример с двумя запросами: SELECT avg(YEAR(DATE())-YEAR(datar)) as Sr_age FROM sved INTO TABLE age SELECT fam FROM sved,age WHERE (YEAR(DATE())-YEAR(datar))< Age.sr_age ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 01:08 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
Во-первых, возраст надо определять не просто по году, например, так: 13738743 Во-вторых, а почему именно вложенный подзапрос и зачем он, если "средний возраст" - это одно число? То есть сначала калькулируем средний возраст в переменную, а затем отбираем запросом нужные фамилии. Другое дело, если не хочется два раза гонять UDFдля определения возраста каждого клиента (первый раз - в расчете среднего, второй - при отборе), но, с другой стороны, у нас же не MSSQL, сделать несколько последовательных выборок-обработок никто не запрещает... Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 02:07 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
AndreTM Этому человеку не нужно определять ВОЗРАСТ. Вас смутило знакомое вам слово. Ему нужно определить тех клиентов, у которых возраст МЕНЬШЕ среднего возраста всех клиентов, т.е. чья дата рождения НЕ МЕНЬШЕ определенной даты. И он хочет это сделать одним запросом. Примерно так (давно этим не занимался) SELECT fam FROM sved WHERE YEAR(datar) > (SELECT AVG(YEAR(datar)) FROM sved) И скорее всего, YEAR(datar) лучше заменить на VAL(DTOS(datar)), раз там список гостей. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 11:55 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
Ответ прост. SELECT fam FROM sved WHERE (YEAR(DATE())-YEAR(datar)) < (select avg(YEAR(DATE())-YEAR(datar)) FROM sved) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 16:11 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
12345sqlОтвет прост. SELECT fam FROM sved WHERE (YEAR(DATE())-YEAR(datar)) < (select avg(YEAR(DATE())-YEAR(datar)) FROM sved) Что у вас меняется, если в вашей функции убрать YEAR(DATE()) по разные стороны сравнения? Сегодня 18 января, у кого-то может быть день рождения (хотя и необязательно). Проверьте вашу функцию, например, при трех датах: 17 янв 2000, 18 янв 2000, 19 янв 2000. Вам возраст нужен или число годов считая от года рождения? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 17:27 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
sg12Примерно так (давно этим не занимался) SELECT fam FROM sved WHERE YEAR(datar) > (SELECT AVG(YEAR(datar)) FROM sved) И скорее всего, YEAR(datar) лучше заменить на VAL(DTOS(datar)), раз там список гостей.В принципе, логично. Вот только VAL(DTOS( - нелинейная, и среднее окажется несколько неверным... Тогда уж лучше посчитать возраст в днях и сравнить: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 21:48 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
AndreTMSELECT fam FROM sved WHERE (DATE()-datar) < (SELECT AVG(DATE()-datar) FROM sved) Да, так получше будет. Если еще високосная дата не подкузьмит, но лень проверять. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 22:31 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
sg12[Если еще високосная дата не подкузьмитФокс считает разницу дат по своему встроенному календарю, так что все високосные учитываются нормально: Код: sql 1. 2.
Кстати, если просто даты формировать можно в диапазоне от 1601 до 9999 года, то разность считается и с 0001 годом... Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 23:10 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
AndreTM, да, похоже функцию можно отправлять Людмиле в копилку. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2013, 23:33 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
AndreTM, А в Вашем примере: Код: sql 1.
AVG - это функция пользователя? в хэлпе я нашла команду AVERAGE ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 12:15 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
mosalova, нет, это стандартная агрегатная функция, используемая в select-sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 12:27 |
|
Встроенный запрос
|
|||
---|---|---|---|
#18+
tanglir, спасибо, теперь нашла ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2013, 12:59 |
|
|
start [/forum/topic.php?fid=41&msg=38116102&tid=1583204]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
others: | 270ms |
total: | 419ms |
0 / 0 |