Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

Запросы   Найти похожие ветки 

 
Клара   (2006-12-08 10:26) [0]

Есть таблица персонала, поля: Dat_R, Age(вычисляется).
Нужно разбить данные по возрастным группам: от20 до 29, от 30 до 39 и т.д и т.п


 
Elen ©   (2006-12-08 10:32) [1]


> Нужно разбить данные по возрастным группам: от20 до 29,
> от 30 до 39 и т.д и т.п

Ну так простой Order by просортирует.


 
Jeer ©   (2006-12-08 10:37) [2]


> Нужно разбить данные


Мы не будем телепатировать - уточните, что значит разбить.


 
Elen ©   (2006-12-08 10:43) [3]


> Клара

Кстати есть в SQL Groub By Having условия AND условия... (если не ошибаюсь ;))


 
Клара   (2006-12-08 10:44) [4]

На этой разбивке нужно построить график возрастных категорий и сортировка я думаю не пожет. Здесь нужно вычислить, сколько человек в возрасте от 20 до 29, сколько от 30 до 39.


 
oxffff ©   (2006-12-08 10:45) [5]

А я понял она хочет сколько есть молодых, полумолодых, недозрелых,
зрелых, перезрелых, ну и далее.


 
oxffff ©   (2006-12-08 10:46) [6]

О а я угадал.


 
Клара   (2006-12-08 10:46) [7]


> oxffff

Ну и что?


 
Sergey13 ©   (2006-12-08 10:47) [8]

А СУБД какая?


 
Клара   (2006-12-08 10:48) [9]

БД в Access, а проги в Delphi7


 
oxffff ©   (2006-12-08 10:49) [10]

Specifies a search condition for a group or an aggregate. HAVING can be used only with the SELECT statement. HAVING is typically used in a GROUP BY clause. When GROUP BY is not used, HAVING behaves like a WHERE clause.


 
oxffff ©   (2006-12-08 10:54) [11]

HAVING тебе не поможет

Тебе нужно будет использовать CASE и group by

Что то вроде этого

select id,case age .. as agegroup,sum(agegroup) from person group by id,agegroup


 
Клара   (2006-12-08 10:54) [12]


> oxffff

Вам скучно, Вы так развлекаетесь?


 
Sergey13 ©   (2006-12-08 10:55) [13]

> [9] Клара   (08.12.06 10:48)

Не знаю какие в Аксес есть функции, но надо нечто вроде (псевдокод)
select Int(Age/10) as Age10, count(Age)
from table_name
group by Int(Age/10)


 
Клара   (2006-12-08 10:56) [14]

А Access как воспримет Case?


 
oxffff ©   (2006-12-08 10:57) [15]

Приведи описание таблицы.


 
Клара   (2006-12-08 10:58) [16]


> Sergey13

Я попробую! Спасибо


 
oxffff ©   (2006-12-08 10:59) [17]

О пардон ошибся

select id,case age .. as agegroup,count(agegroup) from person group by id,agegroup

не sum, а count Конечно же


 
Клара   (2006-12-08 11:01) [18]


> oxffff

Pers(tabn,surname,name,data_r,adres,...)


 
Anatoly Podgoretsky ©   (2006-12-08 11:01) [19]

> Клара  (08.12.2006 10:26:00)  [0]

Привести к целому и поделить на 10
По этому значению группировать и вычислять количество


 
Anatoly Podgoretsky ©   (2006-12-08 11:03) [20]

> Клара  (08.12.2006 10:54:12)  [12]

Конечно скучно и почему бы не поразвлекаться, пока не будет задан вопрос?


 
oxffff ©   (2006-12-08 11:05) [21]

Anatoly Podgoretsky ©   (08.12.06 11:01) [19]

Ну или действительно так элегантнее.


 
Клара   (2006-12-08 11:05) [22]


> oxffff

Если честно, мне нравится идея, но ничего похожего я не видела.
А можно расписать CASE


 
Клара   (2006-12-08 11:07) [23]


> Anatoly Podgoretsky

А это я не Вам. Но за совет спасибо.


 
Anatoly Podgoretsky ©   (2006-12-08 11:11) [24]

> Клара  (08.12.2006 11:07:23)  [23]

Ну почему не мне, я тоже не против.
У тебя вопрос плохо поставлен, пришлось много кратно уточнять.
А у меня сегодня телепатор свежий.


 
Клара   (2006-12-08 11:17) [25]


> Anatoly Podgoretsky


О чем речь?


 
oxffff ©   (2006-12-08 11:17) [26]

Если возрастные группы неравномерны ( то есть не "кратны 10"), то CASE

Evaluates a list of conditions and returns one of multiple possible result expressions.

CASE has two formats:

The simple CASE function compares an expression to a set of simple expressions to determine the result.

The searched CASE function evaluates a set of Boolean expressions to determine the result.

Both formats support an optional ELSE argument.

Transact-SQL Syntax Conventions

Syntax

Simple CASE function:
CASE input_expression
    WHEN when_expression THEN result_expression
   [ ...n ]
    [
   ELSE else_result_expression
    ]
END
Searched CASE function:
CASE
    WHEN Boolean_expression THEN result_expression
   [ ...n ]
    [
   ELSE else_result_expression
    ]
END


Arguments
input_expression
Is the expression evaluated when the simple CASE format is used. input_expression is any valid expression.

WHEN when_expression
Is a simple expression to which input_expression is compared when the simple CASE format is used. when_expression is any valid expression. The data types of input_expression and each when_expression must be the same or must be an implicit conversion.

n
Is a placeholder that indicates that multiple WHEN when_expression THEN result_expression clauses, or multiple WHEN Boolean_expression THEN result_expression clauses can be used.

THEN result_expression
Is the expression returned when input_expression equals when_expression evaluates to TRUE, or Boolean_expression evaluates to TRUE. result expression is any valid expression.

ELSE else_result_expression
Is the expression returned if no comparison operation evaluates to TRUE. If this argument is omitted and no comparison operation evaluates to TRUE, CASE returns NULL. else_result_expression is any valid expression. The data types of else_result_expression and any result_expression must be the same or must be an implicit conversion.

WHEN Boolean_expression
Is the Boolean expression evaluated when using the searched CASE format. Boolean_expression is any valid Boolean expression.

Result Types
Returns the highest precedence type from the set of types in result_expressions and the optional else_result_expression. For more information, see Data Type Precedence (Transact-SQL).


 
Клара   (2006-12-08 11:21) [27]


> oxffff

Это что бы мало не показалось. Отстань мол.
Я приму к сведению.


 
oxffff ©   (2006-12-08 11:23) [28]

То есть в твоем случае будет

select case age
        ...
        WHEN age>20 and age<30 THEN 3
        WHEN age>30 and age<40 THEN 4
        ...
        end
        as agegroup,
        count(agegroup) from person group by agegroup

Естественно можно вместо THEN 3 писать THEN "20-29".

Это есть в MS SQL. Что касаемо ACCESS, то не знаю


 
oxffff ©   (2006-12-08 11:24) [29]


> Клара   (08.12.06 11:21) [27]
>
> > oxffff
>
> Это что бы мало не показалось. Отстань мол.
> Я приму к сведению.


НЕ понял тебя?


 
Клара   (2006-12-08 11:25) [30]


> oxffff

Для каких СУБД. И кто автор.


 
Клара   (2006-12-08 11:27) [31]


> oxffff

Я о размере справки.


 
oxffff ©   (2006-12-08 11:28) [32]


> Клара   (08.12.06 11:25) [30]
>
> > oxffff
>
> Для каких СУБД. И кто автор.


Вы говорите загадками.  Опять не понял вас.
Что вы хотите?


 
Клара   (2006-12-08 11:31) [33]


> oxffff

Вы перегрелись, раслабтесь и улыбнитесь.
Ничего обидного. А я пока займусь практикой.


 
Anatoly Podgoretsky ©   (2006-12-08 11:32) [34]

> oxffff  (08.12.2006 11:17:26)  [26]

не "кратны М"),


 
Anatoly Podgoretsky ©   (2006-12-08 11:33) [35]

> oxffff  (08.12.2006 11:23:28)  [28]

Тут есть ошибка в логике, все кратные 10 выпадают, первое отношение должно быть >=


 
oxffff ©   (2006-12-08 11:33) [36]


> Клара   (08.12.06 11:31) [33]
>
> > oxffff
>
> Вы перегрелись, раслабтесь и улыбнитесь.
> Ничего обидного. А я пока займусь практикой.


Вы поняли реализацию на CASE?


 
Клара   (2006-12-08 11:37) [37]

Да я Вас поняла. Мне нужно время, что-бы опробовать и тот и другой варианты.
Результат сообщу.


 
oxffff ©   (2006-12-08 11:38) [38]


> Anatoly Podgoretsky ©   (08.12.06 11:33) [35]
> > oxffff  (08.12.2006 11:23:28)  [28]
>
> Тут есть ошибка в логике, все кратные 10 выпадают, первое
> отношение должно быть >=


Абсолютно с вами согласен.
Я тоже заметил, но уже после того, как запостил.


 
Virgo_Style ©   (2006-12-08 11:39) [39]

oxffff ©   (08.12.06 11:28) [32]
Вы говорите загадками.  Опять не понял вас.
Что вы хотите?


Ты зачем девушку обижаешь, справку цитируешь? %-)
Или
"Ты не умничай, ты рукой махни".

imho.


 
Клара   (2006-12-08 11:40) [40]


> Anatoly Podgoretsky

А разве можно группировать по вычисляемому полю или имеется ввиду псевдоним?



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.039 c
2-1165666026
xela
2006-12-09 15:07
2006.12.31
Передача текста в браузер


2-1166096952
goric
2006-12-14 14:49
2006.12.31
String в синтаксис языка


6-1154948368
shock
2006-08-07 14:59
2006.12.31
Глюки Win98+Indy10+TIdPOP3


9-1140905412
KreeS
2006-02-26 01:10
2006.12.31
Z-Order


15-1165847798
Yulia M
2006-12-11 17:36
2006.12.31
Огромное несчастье!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский