কম্পিউটার টিউটোরিয়াল

MySQL-এ যোগফল ১৫০-এর নিচে থাকা কলাম মানগুলো ডেসেন্ডিং অর্ডারে বের করা

MySQL-এ সাবকোয়েরি ব্যবহার করে ক্রমাগত যোগফল (cumulative sum) ১৫০-এর নিচে থাকা রেকর্ডগুলো বের করা যায়।

উদাহরণ: টেবিল তৈরি এবং ডেটা ইনসার্ট

mysql> create table DemoTable844( 
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    Amount int 
); 
Query OK, 0 rows affected (0.95 sec)
mysql> insert into DemoTable844(Amount) values(80); 
Query OK, 1 row affected (0.19 sec) 
mysql> insert into DemoTable844(Amount) values(100); 
Query OK, 1 row affected (0.08 sec) 
mysql> insert into DemoTable844(Amount) values(60); 
Query OK, 1 row affected (0.18 sec) 
mysql> insert into DemoTable844(Amount) values(40); 
Query OK, 1 row affected (0.36 sec) 
mysql> insert into DemoTable844(Amount) values(150); 
Query OK, 1 row affected (0.12 sec) 
mysql> insert into DemoTable844(Amount) values(24); 
Query OK, 1 row affected (0.40 sec)

সকল রেকর্ড দেখানো

mysql> select * from DemoTable844;
+----+--------+
| Id | Amount |
+----+--------+
| 1  | 80     |
| 2  | 100    |
| 3  | 60     |
| 4  | 40     |
| 5  | 150    |
| 6  | 24     |
+----+--------+
6 rows in set (0.00 sec)

ক্রমাগত যোগফল ১৫০-এর নিচে থাকা রেকর্ড (Id অনুযায়ী অর্ডার)

mysql> select * from DemoTable844 tbl 
    where (select sum(Amount) from DemoTable844 where Amount <= tbl.Amount order by Amount) < 150 
    order by Id;
+----+--------+
| Id | Amount |
+----+--------+
| 3  | 60     |
| 4  | 40     |
| 6  | 24     |

ব্যাখ্যা

  • সাবকোয়েরি: (select sum(Amount) from DemoTable844 where Amount <= tbl.Amount order by Amount)
  • প্রতিটি বাহ্যিক রো (tbl) এর জন্য, সেটি থেকে ছোট বা সমান Amountवाले সকল রোর যোগফল বের করে
  • যদি যোগফল < 150 হয়, তবে ওই রো সিলেক্ট হয়
  • ORDER BY Id - মূল টেবিলের Id অনুযায়ী ফলাফল সাজানো

দ্রষ্টব্য

এই কোয়েরিটি Amount অনুযায়ী সর্ট করে যোগফল বের করে (Id অনুযায়ী নয়)। Id ১ (Amount 80) এর জন্য যোগফল = 24+40+60+80 = 204 > 150, তাই বাদ পড়েছে।

মডার্ন পদ্ধতি (MySQL 8.0+): Window Function

SELECT Id, Amount FROM (
    SELECT Id, Amount, 
           SUM(Amount) OVER (ORDER BY Amount ROWS UNBOUNDED PRECEDING) as RunningSum
    FROM DemoTable844
) t WHERE RunningSum < 150 ORDER BY Id;
  1. MySQL-এ ফ্লোট ভ্যালু রাউন্ড করে নতুন কলামে ফলাফল প্রদর্শন করা

  2. MySQL কোয়েরি: ডISTINCT ভ্যালুর আওতা গণনা করে নতুন কলামে প্রদর্শন করা

  3. MySQL-এ নির্দিষ্ট কলামের মানগুচ্ছের আকার বের করা এবং যোগফল দেখানো

  4. MySQL에서 CASE WHEN으로 동일 컬럼의 두 가지 다른 합계 구하기