MySQL-এ CASE WHEN ব্যবহার করে আংশিক মিলের উপর ভিত্তি করে রেকর্ড ফিল্টার করা
যদি আপনি চান যেন একটি রেকর্ড নির্বাচিত হয় যখন সেটি নিদর্শিত শর্তগুলোরうち নির্দিষ্ট সংখ্যক (যেমন ৪টি শর্তে ৩টি) পূরণ করে, তবে CASE WHEN এক্সপ্রেশন ব্যবহার করে প্রতিটি শর্তের জন্য ১ বা ০ গণনা করে তাদের যোগফল নিতে পারেন।
সিনট্যাক্স
SELECT * FROM yourTableName
WHERE (CASE WHEN col1 = val1 THEN 1 ELSE 0 END) +
(CASE WHEN col2 = val2 THEN 1 ELSE 0 END) +
(CASE WHEN col3 = val3 THEN 1 ELSE 0 END) +
(CASE WHEN col4 = val4 THEN 1 ELSE 0 END) >= 3;
উদাহরণ
টেবিল তৈরি
mysql> CREATE TABLE UserInformation (
-> Id INT NOT NULL AUTO_INCREMENT,
-> FirstName VARCHAR(20),
-> LastName VARCHAR(20),
-> Age INT,
-> Marks INT,
-> PRIMARY KEY(Id)
-> );
ডেটা ইনসার্ট
mysql> INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('John', 'Smith', 22, 89);
mysql> INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('Carol', 'Taylor', 21, 80);
mysql> INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('John', 'Doe', 24, 81);
mysql> INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('David', 'Miller', 29, 99);
mysql> INSERT INTO UserInformation(FirstName, LastName, Age, Marks) VALUES('Mitchell', 'Johnson', 22, 65);
সকল রেকর্ড দেখানো
mysql> SELECT * FROM UserInformation;
আউটপুট
+----+-----------+----------+------+-------+ | Id | FirstName | LastName | Age | Marks | +----+-----------+----------+------+-------+ | 1 | John | Smith | 22 | 89 | | 2 | Carol | Taylor | 21 | 80 | | 3 | John | Doe | 24 | 81 | | 4 | David | Miller | 29 | 99 | | 5 | Mitchell | Johnson | 22 | 65 | +----+-----------+----------+------+-------+
কোয়েরি: FirstName='Mitchell' OR LastName='Johnson' OR Age=22 OR Marks=67 — এই ৪টি শর্তে কমপক্ষে ৩টি মিলে এমন রেকর্ড
mysql> SELECT * FROM UserInformation
-> WHERE (CASE WHEN FirstName = 'Mitchell' THEN 1 ELSE 0 END) +
-> (CASE WHEN LastName = 'Johnson' THEN 1 ELSE 0 END) +
-> (CASE WHEN Age = 22 THEN 1 ELSE 0 END) +
-> (CASE WHEN Marks = 67 THEN 1 ELSE 0 END) >= 3;
ফলাফল
+----+-----------+----------+------+-------+ | Id | FirstName | LastName | Age | Marks | +----+-----------+----------+------+-------+ | 5 | Mitchell | Johnson | 22 | 65 | +----+-----------+----------+------+-------+
রেকর্ড আইডি ৫ (Mitchell Johnson, 22, 65) তিনটি শর্ত পূরণ করেছে: FirstName='Mitchell', LastName='Johnson', Age=22। Marks=67 মিলেনি।