122. Sekin subquery ni qayta yozish
QiyinSubquery'larUzum
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
| Ustun | Turi |
|---|---|
| id | INT PK |
| name | VARCHAR(50) |
Jadval: orders
| Ustun | Turi |
|---|---|
| id | INT PK |
| seller_id | INT |
| amount | NUMERIC(12,2) |
Namuna ma'lumotlar
sample
sellers
| idINT | nameVARCHAR(50) |
|---|---|
| 3 | Kitob Olami |
| 6 | Bolalar Dunyosi |
orders
| idINT | seller_idINT | amountNUMERIC(12,2) |
|---|---|---|
| 7 | 3 | 400000 |
| 8 | 3 | 350000 |
Kutilgan natija
| seller | revenue | avg_check | orders_count |
|---|---|---|---|
| Kitob Olami | 750000 | 375000 | 2 |
| Bolalar Dunyosi | 0 | 0 | 0 |
sample-full
sellers
| idINT | nameVARCHAR(50) |
|---|---|
| 1 | TechnoPark |
| 2 | MegaHome |
| 3 | Kitob Olami |
| 4 | SportMax |
| 5 | AgroMarket |
| 6 | Bolalar Dunyosi |
orders
| idINT | seller_idINT | amountNUMERIC(12,2) |
|---|---|---|
| 1 | 1 | 3000000 |
| 2 | 1 | 2500000 |
| 3 | 1 | 1800000 |
| 4 | 2 | 1200000 |
| 5 | 2 | 900000 |
| 6 | 2 | 2900000 |
| 7 | 3 | 400000 |
| 8 | 3 | 350000 |
| 9 | 4 | 4000000 |
| 10 | 4 | 4500000 |
| 11 | 4 | 1000000 |
| 12 | 5 | 2000000 |
| 13 | 5 | 3000000 |
| 14 | 5 | 600000 |
Kutilgan natija
| seller | revenue | avg_check | orders_count |
|---|---|---|---|
| SportMax | 9500000 | 3166666.67 | 3 |
| TechnoPark | 7300000 | 2433333.33 | 3 |
| AgroMarket | 5600000 | 1866666.67 | 3 |
| MegaHome | 5000000 | 1666666.67 | 3 |
| Kitob Olami | 750000 | 375000 | 2 |
| Bolalar Dunyosi | 0 | 0 | 0 |
sample-extra
sellers
| idINT | nameVARCHAR(50) |
|---|---|
| 2 | Bolalar Dunyosi |
| 1 | SportMax |
orders
| idINT | seller_idINT | amountNUMERIC(12,2) |
|---|---|---|
| 2 | 1 | 4038900 |
| 1 | 1 | 3958677.19 |
Kutilgan natija
| seller | revenue | avg_check | orders_count |
|---|---|---|---|
| SportMax | 7997577.19 | 3998788.6 | 2 |
| Bolalar Dunyosi | 0 | 0 | 0 |
O'xshash masalalar
Konsol
Natijani ko'rish uchun so'rovni ishga tushiring.
