Oracle SQL рдХреА рдмреЛрд▓реА: рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореЙрдбрд▓ред рднрд╛рдЧ 1

рдЫрд╡рд┐ рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреА рдкреАрдврд╝реА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рднрд╛рд░реА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдпрд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░, рдирд┐рдХрд╛рд▓реЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рднреАред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдореЗрдВ рдЧрдгрдирд╛ рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЙрдкрд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдк-рдпреЛрдЧреЛрдВ рдХреА рдЧрдгрдирд╛, рдЧрдгрдирд╛рдПрдВ рдЬреЛ рдЖрд╕рдиреНрди рдирдореВрдирд╛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рддрд╛рд░ рдХреЗ рдЬрдЯрд┐рд▓ рд╕реНрд╡рд░реВрдкрдг рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдЕрдХреНрд╕рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрддрд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрддрд░ рддрдХ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЖрд╕рд╛рдиреА рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрди SQL рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Oracle DBMS рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдХрд╛рд░реНрдп рдФрд░ MODEL рдСрдкрд░реЗрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреАред

SELECT рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░ DBMS рд╕рдВрд╕реНрдХрд░рдг 10g рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ рд╣реИред рдореЙрдбрд▓ рдЖрдкрдХреЛ рдирдореВрдирд╛ рдбреЗрдЯрд╛ рдХреЛ рдмрд╣реБрдЖрдпрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ, рдмрджрд▓рдиреЗ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ, рдЬрдЯрд┐рд▓ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдФрд░ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдкреАрдПрд▓ / рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕реА рд╕рдордп, рднрд╛рд╖рд╛ рдирд┐рд░реНрдорд╛рдг рдкрдардиреАрдп рдФрд░ рдШреЛрд╖рдгрд╛рдкрддреНрд░ рдмрдиреЗ рд╣реБрдП рд╣реИрдВред рдПрдХ рд╢рдмреНрдж рдореЗрдВ - рдПрдХреНрд╕реЗрд▓ рдЬреИрд╕рд╛, рдкреНрд▓рд╕ рдкреВрд░рд╛ рд▓реЛрдб рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдкрдбрд╝рддрд╛ рд╣реИред

рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕


MODEL [ IGNORE NAV ] [ RETURN UPDATED ROWS ]
[ PARTITION BY (partition_column_1, ...)]
DIMENSION BY (dimension_column_1, ...)
MEASURES (measured_column_1, ...)
RULES [ AUTOMATIC ORDER | ITERATE (value) [ UNTIL (expression)]] (
rule_1, ...
);

MODEL рдХрдерди рдХреЛ рдмрд╛рдж рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рдХреЗрд╡рд▓ DISTINCT рдФрд░ ORDER BY рджреНрд╡рд╛рд░рд╛ред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдирдореВрдирд╛ рд╕реНрддрдВрднреЛрдВ рдХреЛ__рдкреБрд╖реНрдХрд░_ рдХреЗ рд▓рд┐рдП рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдпрд╛рдо_рдХреЛрд▓рд┐__ рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгрд┐рдпрд╛рдБ рджреЗрддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд┐рднрд╛рдЬрди рдмрд╛рдп рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рди рд╡рд┐рднрд╛рдЬрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдирд┐рдпрдо_ * рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╕реНрд╡рддрдВрддреНрд░ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдирд┐рдпрдореЛрдВ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдВрдЦреНрдпрд╛ 1, 2 рдФрд░ 3 рдХреЗ рдирдореВрдиреЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗ:

SELECT *
FROM dual
MODEL DIMENSION BY (0 dimension)
MEASURES (dummy)
RULES (
dummy[5] = 1,
dummy[6] = 2,
dummy[7] = 3
);

DIMENSION R
---------- -
0 X
7 3
6 2
5 1

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рддреАрди рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдпрд╛рдо рдЖрдпрд╛рдо рдХреЗ рд╕рд╛рде рдбрдореА рд╕рд░рдгреА рднрд░рд╛ рд╣реБрдЖ рд╣реИред рдПрдХ рдирдпрд╛ рд╕реНрддрдВрдн рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо 0 рдЖрдпрд╛рдо рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЗрдП рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдкрд╣рд▓рд╛ рдЪрд░рдг рдЪрдпрди рд╕реНрддрдВрднреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ ( рдЖрдпрд╛рдо рдореЗрдВ 0 рдЖрдпрд╛рдо , MEASURES рдореЗрдВ рдбрдореА ), рдлрд┐рд░ рдХреЙрд▓рдо рдЪреБрдиреЗрдВ (рд╡рд╛рдкрд╕реА рдбрдореА = рдПрдХреНрд╕, рдЖрдпрд╛рдо = 0 ) рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдпрд╛рдо = 5 рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕реЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рдПрдХ рдирдпрд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдбрдореА = 1 рднрд░рд╛ рд╣реБрдЖ рд╣реИ, рдЗрд╕реА рддрд░рд╣ рд╢реЗрд╖ рджреЛ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, RETURN UPDATED ROWS рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рд▓рд╛рдЗрдиреЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

SELECT result, dummy
FROM dual
MODEL RETURN UPDATED ROWS
DIMENSION BY (dummy)
MEASURES (0 result)
RULES (
result[5] = 1,
result[6] = 2,
result[7] = 3
);

RESULT DUMMY
---------- ------
3 7
2 6
1 5

рдЖрдк рд▓реВрдк рдореЗрдВ рдирд┐рдпрдо рд╕реЗрдЯ рднреА рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдПрдХ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдХрдИ рддрддреНрд╡реЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ:

SELECT sequence
FROM dual
MODEL DIMENSION BY (0 dimension)
MEASURES (0 sequence)
RULES ITERATE (100500) UNTIL (sequence[iteration_number] > 10) (
sequence[iteration_number] =
CASE iteration_number
WHEN 0 THEN 0
WHEN 1 THEN 1
ELSE sequence[iteration_number - 2] + sequence[iteration_number - 1]
END
);

SEQUENCE
----------
0
1
1
2
3
5
8
13

ITERATE рд▓реВрдк рдХреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ (0 рд╕реЗ рд╢реБрд░реВ), рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ UNTIL рдирд┐рд░реНрджреЗрд╢ рдЗрд╕реЗ (рдЬреЛ рдХрд╛рдо рдХрд┐рдпрд╛, рдЗрд╕ рддрдереНрдп рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ Ctrl + End рдХреЛ рджрдмрд╛рдпрд╛ рдирд╣реАрдВ рд╣реИ) рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдХрд╛рдЙрдВрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪ iteration_number рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИред

рд░рдВрдЧ рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг


рдЫрд╡рд┐ рдКрдкрд░, рд╣рдордиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрддреНрд╡реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдпрдореЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд░реНрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкреНрд░рддреАрдХрд╛рддреНрдордХ (рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ рд╕реНрдерд┐рддреАрдп рдереЗ)ред рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдореЗрдВ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рд╕рддреНрдпрд╛рдкрди рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рд╕реНрдерд┐рддреАрдп рд▓рд┐рдВрдХ рдореЗрдВ, рд╕реВрдЪрдХрд╛рдВрдХ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдирдП рддрддреНрд╡ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ (рдпрджрд┐ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ)ред рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЖрдкрдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВред рдпрд╣ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕рдордЧреНрд░ рдХрд╛рд░реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдВрджрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдХрд╛рд░реНрдп рдирд┐рд╖рд┐рджреНрдз рд╣реИрдВред

рд╕рдкреНрддрд╛рд╣ рдХреЗ рджреМрд░рд╛рди рдХреЙрдлреА рдХреЗ рдирд╢реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

SELECT * FROM coffee;

TYPE CNT DAY
-------------------- ---------- ----------
turkish 1 1
espresso 1 1
turkish 2 2
black 1 2
espresso 1 2
latte 3 3
black 2 4
ice 1 4

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рджрд┐рди рдХрд┐рддрдиреЗ рдХрдк рдХреЙрдлреА рдкрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдХрд┐ рдЧреБрд░реБрд╡рд╛рд░ рдХреЛ рдмреНрд▓реИрдХ рдХреЙрдлрд╝реА рдХреА рдорд╛рддреНрд░рд╛ рджреЛрдЧреБрдиреА рдереАред рддреЛ рдЕрдиреБрд░реЛрдз рд╣реИ:

SELECT *
FROM coffee
MODEL DIMENSION BY (day, type)
MEASURES (cnt)
RULES (
cnt[4, 'black' ] = cnt[cv(day), 'black' ] * 2,
cnt[ FOR day FROM 1 TO 4 INCREMENT 1, ' total for day' ] = sum<(cnt)[cv(day), ANY ],
cnt[ NULL , 'GRAND TOTAL' ] = sum(cnt)[ ANY , ' total for day' ]
)
ORDER BY day, type DESC ;

DAY TYPE CNT
--------- -------------------- ---------
1 turkish 1
1 espresso 1
1 total for day 2
2 turkish 2
2 espresso 1
2 black 1
2 total for day 4
3 latte 3
3 total for day 3
4 ice 1
4 black 4
4 total for day 5
GRAND TOTAL 14

рд╣рдо рдирд┐рдпрдореЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓рд╛ рдЧреБрд░реБрд╡рд╛рд░ рдХреЛ рдХреЙрдлреА рдХреЗ рдирд╢реЗ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред Cv (ampl_name) рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП ampl_name рдЖрдпрд╛рдо рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, cv (рджрд┐рди) рдХреЗ рдмрдЬрд╛рдп , рдЖрдк рджрд┐рди = 4 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛ, рддреЛ рдкрд┐рдЫрд▓реЗ рджрд┐рди рдХреЛ рджрд┐рди рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВ = cv () рджрд┐рди) - 1) ред рджреВрд╕рд░рд╛ рдирд┐рдпрдо рд╕реЛрдорд╡рд╛рд░ рд╕реЗ рдЧреБрд░реБрд╡рд╛рд░ рддрдХ рдЙрдк-рдпреЛрдЧреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рд▓реВрдк рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд┐рддреНрд░рдг рд╣реИ), рдпрд╣рд╛рдВ рд╕рдорд╛рдирддрд╛ рдХреЗ рджрд╛рдПрдВ-рдмрд╛рдПрдВ рдкрдХреНрд╖реЛрдВ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд░рдВрдЧ рдЙрд╕реА рддрд░рд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ WHERE рдХреНрд▓реЙрдЬрд╝ рдореЗрдВ рдЪреЗрдХ, рдХрд┐рд╕реА рднреА рдЗрдВрдбреЗрдХреНрд╕ рдорд╛рди рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдореАрдХрд░рдг рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЛ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рддреАрд╕рд░рд╛ рдирд┐рдпрдо рдЙрдк рдпреЛрдЧ рдХрд╛ рдпреЛрдЧ рдорд╛рдирддрд╛ рд╣реИред

рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдПрдХ рдХреНрд╡реЗрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдХреЙрдлреА рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдПрдХ рдкреЗрдп рдХреЗ рдпреЛрдЧ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдордВрдЧрд▓рд╡рд╛рд░ рдХреЛ рд▓рдЯреНрдЯреЗ рдХреА рдорд╛рддреНрд░рд╛, рд╕рд╛рде рд╣реА рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рдкреНрддрд╛рд╣ рдХрд╛ рд▓рдХреНрд╖реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдмреБрдзрд╡рд╛рд░ рдХреЛ рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдкреАрдиреЗ рдХреЗ рд▓рд┐рдП:

SELECT *
FROM coffee
MODEL DIMENSION BY (day, type)
MEASURES (cnt)
RULES (
cnt[ NULL , FOR type IN ( SELECT DISTINCT type FROM coffee)] = sum(cnt)[ ANY , cv(type)],
cnt[ NULL , 'GRAND TOTAL' ] = sum(cnt)[ NULL , ANY ],
cnt[ NULL , ' drank ' || cnt[2, 'latte' ] || ' cups of latte on 2 day' ] = NULL ,
cnt[ NULL , CASE
WHEN cnt[3, 'espresso' ] IS PRESENT THEN ' ACHIEVED'
ELSE ' FAILED'
END || ': drank espresso on 3 day' ] = NULL
)
ORDER BY day, type DESC ;

DAY TYPE CNT
---------- ---------------------------------------- ----------
1 turkish 1
1 espresso 1
2 turkish 2
2 espresso 1
2 black 1
3 latte 3
4 ice 1
4 black 2
turkish 3
latte 3
ice 1
espresso 2
black 3
GRAND TOTAL 12
drank cups of latte on 2 day
FAILED: drank espresso on 3 day

рдкрд╣рд▓рд╛ рдирд┐рдпрдо рдирдореВрдирд╛ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред MODEL рдХреЗ рдЕрдВрджрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдиреЗрд╕реНрдЯреЗрдб рдХреНрд╡реЗрд░реАрдЬрд╝ рдЕрд╕рдВрдмрджреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдХреБрд▓ рд░рд╛рд╢рд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рд▓рд╛рдЗрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ "2 рджрд┐рди рдкрд░ рд▓рдЯреНрдЯреЗ рдХреЗ рдкреНрдпрд╛рд▓реЗ"ред рдХреНрдпреЛрдВрдХрд┐ рддрддреНрд╡ cnt [2, 'рд▓рдЯреНрдЯреЗ'] рдирд╣реАрдВ рдорд┐рд▓рд╛ рдерд╛ , рд╣рдореЗрдВ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ NULL рдорд┐рд▓рд╛ред рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ IGNORE NAV рдирд┐рд░реНрджреЗрд╢ (MODEL рд╢рдмреНрдж рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛) рдХреЗ рд╕рд╛рде рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдлрд┐рд░ рддрддреНрд╡реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдирд╣реАрдВ рдорд┐рд▓рд╛ рдФрд░ NULL, рдЧрдгрдирд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЬрд╛рдПрдЧреА: 0 рдХреЗ рд▓рд┐рдП рд╕рдВрдЦреНрдпрд╛, 1 рдЬрдирд╡рд░реА 2001, рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП NULLред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЪреМрдерд╛ рдирд┐рдпрдо IS PRESENT рдХреЗ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдпрд╣ рд╕рдЪ рд╣реИ рдЕрдЧрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрддреНрд╡ рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди, рдЕрдлрд╕реЛрд╕, рдПрд╕реНрдкреНрд░реЗрд╕реЛ рдмреБрдзрд╡рд╛рд░ рдХреЛ рдирд╢реЗ рдореЗрдВ рдирд╣реАрдВ рдерд╛ред

рдЗрд╕ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдкреВрд░реНрдг рд╣реЛрдиреЗ рдкрд░, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓рд╛ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рдЖрджрдд рд╣реЛ рдЧрдИред рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди, рдореЙрдбрд▓ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ, рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдХреЗ рдореБрджреНрджреЛрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

рдФрд░ рдкрдврд╝реЗрдВ

рд╕рд╛рд╣рд┐рддреНрдп

  1. Oracle┬о Database Data Warehousing Guide 11g рд░рд┐рд▓реАрдЬрд╝ 2 - рдЕрдзреНрдпрд╛рдп 22 "рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП SQL"ред рдПрдЪрдЯреАрдПрдордПрд▓
  2. Oracle рдбрд╛рдЯрд╛рдмреЗрд╕ 10g рдХрд╛ SQL рдореЙрдбрд▓ рдХреНрд▓реЙрдЬред рдкреАрдбреАрдПрдл

Source: https://habr.com/ru/post/In101003/


All Articles