Sütunlarla hesap yapmak
SELECT listesinde yalnızca sütun değil, ifade de yazabilirsin. Her satır için hesaplanır ve sonuçta yeni bir sütun olarak görünür. Bu sütuna AS ile anlamlı bir ad vermek iyi bir alışkanlıktır.
SELECT name,
price,
cost,
price - cost AS birim_kar,
ROUND(100.0 * (price - cost) / price, 1) AS kar_marji
FROM products
ORDER BY kar_marji DESC
LIMIT 5;
| Operatör | Anlamı | Örnek |
|---|---|---|
+ - * / | Dört işlem | price * 1.2 |
% | Bölümden kalan (Oracle'da MOD(a, b)) | order_id % 2 |
( ) | Öncelik | (price - cost) / price |
İşlem önceliği
Matematikteki gibi önce çarpma ve bölme, sonra toplama ve çıkarma yapılır. price - cost / price ile (price - cost) / price çok farklı sonuç verir. Emin değilsen parantez kullan.
Tam sayı bölmesi tuzağı
İki tam sayıyı bölmek, SQL türüne göre farklı sonuç verir. SQL Server, PostgreSQL ve SQLite küsuratı atar; MySQL ve Oracle ondalıklı sonuç döndürür. SQL türü sekmelerini değiştirip çıktıya bak:
SELECT 7 / 2 AS tam_bolme,
7 % 2 AS kalan,
7 / 2.0 AS ondalikli;
Oran hesaplarkenSayılardan birini ondalıklı yap:
100.0 * a / b veya CAST(a AS DECIMAL(10,2)) / b. Bu tek alışkanlık, raporlardaki en yaygın hatayı önler.Yuvarlama ve matematik fonksiyonları
SELECT name,
price,
ROUND(price / 3.0, 2) AS ucte_bir,
FLOOR(price / 1000) AS bin_tl_dilimi,
ABS(cost - price) AS fark
FROM products
LIMIT 5;
| Fonksiyon | Ne yapar? |
|---|---|
ROUND(x, n) | n basamağa yuvarlar |
FLOOR(x) / CEILING(x) | Aşağı / yukarı tam sayıya (PostgreSQL ve Oracle'da CEIL) |
ABS(x) | Mutlak değer |
POWER(x, y), SQRT(x) | Üs alma, karekök |
NULL ile aritmetikBir işlemde değerlerden biri NULL ise sonuç da NULL olur:
100 + NULL = NULL. Bunu COALESCE dersinde çözeceğiz.