Mam tabeli software
i kolumn w nim jako dev_cost
, sell_cost
. Jeśli dev_cost
to 16000 i sell_cost
to 7500.
Jak znaleźć ilość oprogramowania do sprzedania w celu odzyskania dev_cost
?
Zapytałem jak poniżej:
select dev_cost / sell_cost from software ;
Jako odpowiedź zwraca 2. Ale musimy zdobyć 3, prawda?
Jakie byłoby zapytanie? Z góry dziękuję.
sql
postgresql
division
modulo
zeewagon
źródło
źródło
select ceil(16000::numeric/7500)
Odpowiedzi:
Twoje kolumny mają typy całkowite, a dzielenie liczb całkowitych skraca wynik do zera . Aby uzyskać dokładny wynik, musisz rzutować co najmniej jedną z wartości na zmiennoprzecinkowe lub dziesiętne :
select cast(dev_cost as decimal) / sell_cost from software ;
Lub tylko:
select dev_cost::decimal / sell_cost from software ;
Następnie możesz zaokrąglić wynik do najbliższej liczby całkowitej za pomocą
ceil()
funkcji:select ceil(dev_cost::decimal / sell_cost) from software ;
(Zobacz demo na SQLFiddle .)
źródło
Możesz rzutować typ liczb całkowitych na
numeric
i użyćceil()
funkcji, aby uzyskać żądane wyjścieSELECT 16000::NUMERIC / 7500 col ,ceil(16000::NUMERIC / 7500)
Wynik:
col ceil ------------------ ---- 2.1333333333333333 3
Więc twoje zapytanie powinno być
select ceil(dev_cost::numeric/sell_cost) from software
źródło
Możesz również rzutować zmienną na żądany typ, a następnie zastosować dzielenie:
SELECT (dev_cost::numeric/sell_cost::numeric);
Możesz zaokrąglić swoją wartość i określić liczbę cyfr po punkcie:
SELECT TRUNC((dev_cost::numeric/sell_cost::numeric),2);
źródło
To zapytanie zaokrągli wynik do następnej liczby całkowitej
select round(dev_cost ::decimal / sell_cost + 0.5)
źródło
dev_cost
jest całkowitą wielokrotnościąsell_cost
: patrz przykład .