Subquery

Kategori: SQL , 01 Ağustos 2019 , JanFranco


Bir sorgunun içinde oluşturduğumuz başka bir sorguya subquery denir ve parantez içinde kullanılır. JOIN ve GROUP BY komutları ile, her bir müşterinin toplam kaç alım yaptığını görelim:


SELECT U.ID, U.USERNAME_, COUNT(B.ID) TOPLAMALIM
FROM USER_ U
JOIN BASKET B ON B.USERID = U.ID
GROUP BY U.ID, U.USERNAME_
Bu sorguyu şimdi de subquery kullanarak yapalım:


SELECT U.ID, U.USERNAME_,
(SELECT COUNT(*) FROM BASKET B WHERE U.ID = B.USERID) AS TOPLAMALIM
FROM USER_ U
WHERE (SELECT COUNT(*) FROM BASKET B WHERE U.ID = B.USERID) > 0
Aşağıdaki örnek müşterilerin oluşturduğu sepet sayısı, ilk oluşturulduğu ve son oluşturulduğu tarih, toplam ödediği fiyat ve aldığı son ürünü göstermektedir:


SELECT U.ID, U.USERNAME_,
(SELECT COUNT(*) FROM BASKET B WHERE U.ID = B.USERID) AS BASKETCOUNT,
(SELECT MIN(B.CREATEDDATE) FROM BASKET B WHERE B.USERID = U.ID) AS FIRSTBASKETDATE,
(SELECT MAX(B.CREATEDDATE) FROM BASKET B WHERE B.USERID = U.ID) AS LASTBASKETDATE,
(SELECT COUNT(*) FROM BASKETDETAIL WHERE BASKETID IN (SELECT ID FROM BASKET WHERE USERID = U.ID)) AS ITEMCOUNT,
(SELECT SUM(BD.TOTAL) FROM BASKETDETAIL BD WHERE BD.BASKETID IN (SELECT ID FROM BASKET B WHERE B.USERID = U.ID)) AS TOTAL,
(SELECT ITEMNAME FROM ITEM WHERE ID IN 
	(SELECT TOP 1 ITEMID FROM BASKETDETAIL WHERE BASKETID IN
		(SELECT ID FROM BASKET WHERE USERID = U.ID) ORDER BY BASKETDETAIL.DATE_ DESC
	)
) AS LASTITEM 
FROM USER_ U
WHERE (SELECT COUNT(*) FROM BASKET B WHERE U.ID = B.USERID) > 0 AND 
(SELECT COUNT(*) FROM BASKETDETAIL WHERE BASKETID IN (SELECT ID FROM BASKET WHERE USERID = U.ID)) > 0


Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın