Asosiy matnga o'tish

122. Sekin subquery ni qayta yozish

Qiyin

Quyidagi so'rov to'g'ri ishlaydi, lekin **har bir sotuvchi uchun jadvalni

uch marta** aylanib chiqadi:

SELECT s.name AS seller,
       (SELECT COUNT(*)  FROM orders o WHERE o.seller_id = s.id) AS orders_count,
       (SELECT SUM(amount) FROM orders o WHERE o.seller_id = s.id) AS revenue,
       (SELECT AVG(amount) FROM orders o WHERE o.seller_id = s.id) AS avg_check
FROM sellers s;

Xuddi shu natijani bitta JOIN va GROUP BY bilan oling.

Buyurtmasi yo'q sotuvchi ham chiqishi kerak: orders_count = 0,

revenue = 0, avg_check = 0.

avg_check 2 xonagacha yaxlitlansin.

Ustunlar: seller, orders_count, revenue, avg_check.

Saralash: revenue kamayish, keyin seller alifbo.

sellers: id INT PK, name VARCHAR

orders: id INT PK, seller_id INT, amount NUMERIC(12,2)

Jadval: sellers

UstunTuri
idINT PK
nameVARCHAR(50)

Jadval: orders

UstunTuri
idINT PK
seller_idINT
amountNUMERIC(12,2)

Namuna ma'lumotlar

sample
sellers
idINTnameVARCHAR(50)
3Kitob Olami
6Bolalar Dunyosi
orders
idINTseller_idINTamountNUMERIC(12,2)
73400000
83350000
Kutilgan natija
sellerrevenueavg_checkorders_count
Kitob Olami7500003750002
Bolalar Dunyosi000
sample-full
sellers
idINTnameVARCHAR(50)
1TechnoPark
2MegaHome
3Kitob Olami
4SportMax
5AgroMarket
6Bolalar Dunyosi
orders
idINTseller_idINTamountNUMERIC(12,2)
113000000
212500000
311800000
421200000
52900000
622900000
73400000
83350000
944000000
1044500000
1141000000
1252000000
1353000000
145600000
Kutilgan natija
sellerrevenueavg_checkorders_count
SportMax95000003166666.673
TechnoPark73000002433333.333
AgroMarket56000001866666.673
MegaHome50000001666666.673
Kitob Olami7500003750002
Bolalar Dunyosi000
sample-extra
sellers
idINTnameVARCHAR(50)
2Bolalar Dunyosi
1SportMax
orders
idINTseller_idINTamountNUMERIC(12,2)
214038900
113958677.19
Kutilgan natija
sellerrevenueavg_checkorders_count
SportMax7997577.193998788.62
Bolalar Dunyosi000

O'xshash masalalar

Konsol

Natijani ko'rish uchun so'rovni ishga tushiring.