Marcin Bugowski

Marcin Bugowski HR Process Analyst,
Payroll System
Administrator,
Citiban...

Temat: zwróć liczbę, ale nie większą niż...

Dzień dobry :)

mam pytanie o instrukcję SQL, która będzie zwracała wartość np. od 0 do 12, ale nie większą niż 12. Jeżeli jej wynik będzie dawał 14, czy 25, maksymalnie zwróci 12.

Mam to na "końcu języka", ale nie mogę sobie przypomnieć, ktoś, coś?

Z góry dziękuję.
Marcin Bugowski

Marcin Bugowski HR Process Analyst,
Payroll System
Administrator,
Citiban...

Temat: zwróć liczbę, ale nie większą niż...

chyba znalazłem:

SELECT
greatest(least(14,12),12) wynik
FROM
dual;

zadziałało, tak jak chciałem...
Marcin Bugowski

Marcin Bugowski HR Process Analyst,
Payroll System
Administrator,
Citiban...

Temat: zwróć liczbę, ale nie większą niż...

tzn nie zadziałało...
coś, ktoś?
oprocz, zwyklego case?

Temat: zwróć liczbę, ale nie większą niż...

A dlaczego nie samo least:
select least(v, 12) wynik from dual?
Wtedy masz zwrócone v dla v < 12, lub 12 w każdym innym przypadku. Chyba, że są jakieś inne wymagania, o których nie wiemy?
Pozdr.
Arek

konto usunięte

Temat: zwróć liczbę, ale nie większą niż...

Marcin B.:
Dzień dobry :)

mam pytanie o instrukcję SQL, która będzie zwracała wartość np. od 0 do 12, ale nie większą niż 12. Jeżeli jej wynik będzie dawał 14, czy 25, maksymalnie zwróci 12.

Mam to na "końcu języka", ale nie mogę sobie przypomnieć, ktoś, coś?

Z góry dziękuję.

Czy chodzi o funkcję modulo 13 ?Ten post został edytowany przez Autora dnia 22.08.14 o godzinie 14:40

Temat: zwróć liczbę, ale nie większą niż...

Chyba jednak nie. Maksymalną wartością dla modulo n będzie oczywiście n-1, ale pojawi się okres (0, 1, 2, ... n-1, 0, 1, 2...n-1 ), natomiast ja z tej wypowiedzi zrozumiałem, że ma zachodzić obcięcie zbyt dużej wartości, coś jak przesterowany wzmacniacz albo ogranicznik diodowy :), tj. (10, 11, 12, 13, 14) --> (10, 11, 12, 12, 12).Ten post został edytowany przez Autora dnia 22.08.14 o godzinie 16:14

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

Temat: zwróć liczbę, ale nie większą niż...

Nie, nie skomplikowane, tylko autor nie chciał instrukcji warunkowych: "oprocz, zwyklego case?" :)
Które zresztą, poza propozycją Jakuba, są nie do uniknięcia.Ten post został edytowany przez Autora dnia 22.08.14 o godzinie 18:13

konto usunięte

Temat: zwróć liczbę, ale nie większą niż...

Adrian O.:
Chyba jednak nie. Maksymalną wartością dla modulo n będzie oczywiście n-1, ale pojawi się okres (0, 1, 2, ... n-1, 0, 1, 2...n-1 ), natomiast ja z tej wypowiedzi zrozumiałem, że ma zachodzić obcięcie zbyt dużej wartości, coś jak przesterowany wzmacniacz albo ogranicznik diodowy :), tj. (10, 11, 12, 13, 14) --> (10, 11, 12, 12, 12).
Jeżeli jej wynik będzie dawał 14, czy 25, maksymalnie zwróci 12.
Ach to techniczne podejcie do ludzi .. ;)

konto usunięte

Temat: zwróć liczbę, ale nie większą niż...

Adrian O.:
Nie, nie skomplikowane, tylko autor nie chciał instrukcji warunkowych: "oprocz, zwyklego case?" :)
Które zresztą, poza propozycją Jakuba, są nie do uniknięcia.

a ta funkcja to nie jest eleganckie opakowanie na konstrukcję warunkową?

Temat: zwróć liczbę, ale nie większą niż...

No jest, racja :) Gdzieś te ify są schowane.
Łukasz Sawa

Łukasz Sawa BI Developer

Temat: zwróć liczbę, ale nie większą niż...

moze CTE by pomoglo ?
Adam O.

Adam O. Bazy danych etc

Temat: zwróć liczbę, ale nie większą niż...

Marcin B.:
tzn nie zadziałało...
coś, ktoś?
oprocz, zwyklego case?

A co jest nie tak z Case? problemy z wydajnością?

SELECT case when v between 0 and 12 then v else 12 end
FROM dual;
Marcin Miga

Marcin Miga Programista. Po
prostu programista.

Temat: zwróć liczbę, ale nie większą niż...

Adam O.:
Marcin B.:
tzn nie zadziałało...
coś, ktoś?
oprocz, zwyklego case?

A co jest nie tak z Case? problemy z wydajnością?

SELECT case when v between 0 and 12 then v else 12 end
FROM dual;
Jak już to:
SELECT CASE WHEN v>12 THEN 12 ELSE v END FROM DUAL;
Marcin Bugowski

Marcin Bugowski HR Process Analyst,
Payroll System
Administrator,
Citiban...

Temat: zwróć liczbę, ale nie większą niż...

Jakub W.:
Marcin B.:
Dzień dobry :)

mam pytanie o instrukcję SQL, która będzie zwracała wartość np. od 0 do 12, ale nie większą niż 12. Jeżeli jej wynik będzie dawał 14, czy 25, maksymalnie zwróci 12.

Mam to na "końcu języka", ale nie mogę sobie przypomnieć, ktoś, coś?

Z góry dziękuję.

Czy chodzi o funkcję modulo 13 ?


nie znam? coś więcej?
Marcin Bugowski

Marcin Bugowski HR Process Analyst,
Payroll System
Administrator,
Citiban...

Temat: zwróć liczbę, ale nie większą niż...

Adam O.:
Marcin B.:
tzn nie zadziałało...
coś, ktoś?
oprocz, zwyklego case?

A co jest nie tak z Case? problemy z wydajnością?

SELECT case when v between 0 and 12 then v else 12 end
FROM dual;


case jest ok i to bardzo, ale jakos za prosty mi sie wydał i chciałem "przedobrzyć" :) w sensie nie isc w te strone, ot co
Marcin Bugowski

Marcin Bugowski HR Process Analyst,
Payroll System
Administrator,
Citiban...

Temat: zwróć liczbę, ale nie większą niż...

Łukasz S.:
moze CTE by pomoglo ?


co to takiego?

konto usunięte

Temat: zwróć liczbę, ale nie większą niż...

Marcin B.:
Łukasz S.:
moze CTE by pomoglo ?


co to takiego?

common table expression
Adam O.

Adam O. Bazy danych etc

Temat: zwróć liczbę, ale nie większą niż...

Marcin B.:
Łukasz S.:
moze CTE by pomoglo ?


co to takiego?

CTE do tego przykładu razem z wykorzystaniem (ale to już chyba przedobrzenie właśnie;))

create table test(v int);

;with wiecej12(val)
as
(
select cast(12 as int) as val
union all
select v from test
)
select max(val) from wiecej12

Przykład do pobawienia się tutaj:
http://sqlfiddle.com/#!6/b1b43/2
Adam O.

Adam O. Bazy danych etc

Temat: zwróć liczbę, ale nie większą niż...

Marcin M.:
Adam O.:
Marcin B.:
tzn nie zadziałało...
coś, ktoś?
oprocz, zwyklego case?

A co jest nie tak z Case? problemy z wydajnością?

SELECT case when v between 0 and 12 then v else 12 end
FROM dual;
Jak już to:
SELECT CASE WHEN v>12 THEN 12 ELSE v END FROM DUAL;

cytuję:)
"instrukcję SQL, która będzie zwracała wartość np. od 0 do 12, ale nie większą niż 12"
Wiem że to było pisane na szybko i chodziło pewnie o to co napisałeś, ale moja odpowiedź jest poprawna, nawet jeżeli zadanie nie do końca sformułowane sensownie;)

Następna dyskusja:

[MySQL] Optymalizacja zapyt...




Wyślij zaproszenie do