Ana içeriğe geç
Kesit SQL
Temel · Temeller

Hesaplanan sütunlar ve aritmetik

Dört işlem, mod, yuvarlama ve kâr marjı gibi türetilmiş sütunlar.

Uygulamada aç, 8 alıştırmayı çözÜcretsiz, hesap gerekmez, kurulum yok.

Bu sayfa dersin okuma sürümüdür. Metin bir kutuyu çalıştırmanı ya da adıma geçmeni söylüyorsa dersi uygulamada aç.

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örAnlamıÖrnek
+ - * /Dört işlemprice * 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;
FonksiyonNe 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.
Alıştırmalara geç (8)