একই কলামে ধনাত্মক ও ঋণাত্মক মান থাকলে, CASE স্টেটমেন্ট ব্যবহার করে তাদের পৃথক যোগফল বের করা যায়।
টেবিল তৈরি ও ডেটা ইনসার্ট
mysql> create table DemoTable(
Id int,
Value int
);
Query OK, 0 rows affected (0.51 sec)
mysql> insert into DemoTable values(10, 100); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(10, -110); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(10, 200); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(10, -678); Query OK, 1 row affected (0.17 sec)
রেকর্ড দেখানো
mysql> select * from DemoTable;
আউটপুট:
+------+-------+ | Id | Value | +------+-------+ | 10 | 100 | | 10 | -110 | | 10 | 200 | | 10 | -678 | +------+-------+ 4 rows in set (0.00 sec)
ধনাত্মক ও ঋণাত্মক যোগফল পৃথক কলামে
mysql> select Id,
SUM(CASE WHEN Value > 0 THEN Value ELSE 0 END) AS Positive_Value,
SUM(CASE WHEN Value < 0 THEN Value ELSE 0 END) AS Negative_Value
from DemoTable
group by Id;
ফলাফল:
+------+----------------+----------------+ | Id | Positive_Value | Negative_Value | +------+----------------+----------------+ | 10 | 300 | -788 | +------+----------------+----------------+ 1 row in set (0.00 sec)
ব্যাখ্যা
CASE WHEN Value > 0 THEN Value ELSE 0 END- ধনাত্মক মানগুলো যোগ করে, অন্যদের ০ ধরে।CASE WHEN Value < 0 THEN Value ELSE 0 END- ঋণাত্মক মানগুলো যোগ করে (নেগেটিভ মানের যোগফল নেগেটিভ হবে)।GROUP BY Id- একই আইডির রোগুলো একত্রিত করে।
বিকল্প: শর্তাধীন অ্যাক্টিভেশন
আপনি SUM(Value * (Value > 0)) ও SUM(Value * (Value < 0)) ও ব্যবহার করতে পারেন (MySQL-এ TRUE=1, FALSE=0)।