GROUP BYসম্মিলিত ফাংশন ছাড়াই ব্যবহার করার সময় সম্ভাব্য অপ্রত্যাশিত ফলাফল এড়াতে , যেমন গৃহীত উত্তরে ব্যবহৃত হয় , কারণ মাইএসকিউএল একটি গোষ্ঠী ফাংশন [সিক] ব্যবহার না করে এবং গোটা বিষয়গুলি ব্যবহার না করার সময় গোষ্ঠীভুক্ত ডেটা সেটের মধ্যে কোনও মান পুনরুদ্ধার করতে মুক্ত । একটি বর্ধিত যোগদান ব্যবহার করে দয়া করে বিবেচনা করুন।ONLY_FULL_GROUP_BY
বর্জন যোগ দিন - দ্ব্যর্থহীন সত্তা
ধরে নিলাম প্রথম নাম এবং পদবি অনন্যতরভাবে সূচকযুক্ত (দ্ব্যর্থহীন) , এর বিকল্পটি GROUP BYহ'ল LEFT JOINফল সেট ফিল্টার করার জন্য একটি ব্যবহার করে বাছাই করা , অন্যথায় বাদ পড়ার নাম হিসাবে পরিচিত O
বিক্ষোভ দেখুন
আরোহী আদেশ (এজেড)
জেড থেকে শেষ নাম দ্বারা অর্ডার করা স্বতন্ত্র প্রথম নামটি পুনরুদ্ধার করতে
প্রশ্ন
SELECT t1.*
FROM table_name AS t1
LEFT JOIN table_name AS t2
ON t1.firstname = t2.firstname
AND t1.lastname > t2.lastname
WHERE t2.id IS NULL;
ফলাফল
| id | firstname | lastname |
|----|-----------|----------|
| 2 | Bugs | Bunny |
| 1 | John | Doe |
অবতরণ আদেশ (জেডএ)
জেডএ থেকে শেষ নাম দ্বারা অর্ডার করা স্বতন্ত্র প্রথম নামটি পুনরুদ্ধার করতে
প্রশ্ন
SELECT t1.*
FROM table_name AS t1
LEFT JOIN table_name AS t2
ON t1.firstname = t2.firstname
AND t1.lastname < t2.lastname
WHERE t2.id IS NULL;
ফলাফল
| id | firstname | lastname |
|----|-----------|----------|
| 2 | Bugs | Bunny |
| 3 | John | Johnson |
তারপরে আপনি ফলাফল হিসাবে পছন্দসই হিসাবে অর্ডার করতে পারেন।
বর্জন যোগ দিন - দ্ব্যর্থহীন সত্তা
যদি প্রথম এবং শেষ নামের সংমিশ্রণটি অনন্য (অস্পষ্ট) না হয় এবং আপনার একই মানগুলির একাধিক সারি থাকে, আপনি আইডির মাধ্যমে ফিল্টার করার জন্য JOIN মানদণ্ডে একটি OR শর্ত যুক্ত করে ফলাফল নির্ধারণ করতে পারবেন।
বিক্ষোভ দেখুন
টেবিলের নাম ডেটা
(1, 'John', 'Doe'),
(2, 'Bugs', 'Bunny'),
(3, 'John', 'Johnson'),
(4, 'John', 'Doe'),
(5, 'John', 'Johnson')
প্রশ্ন
SELECT t1.*
FROM table_name AS t1
LEFT JOIN table_name AS t2
ON t1.firstname = t2.firstname
AND (t1.lastname > t2.lastname
OR (t1.firstname = t1.firstname AND t1.lastname = t2.lastname AND t1.id > t2.id))
WHERE t2.id IS NULL;
ফলাফল
| id | firstname | lastname |
|----|-----------|----------|
| 1 | John | Doe |
| 2 | Bugs | Bunny |
আদেশ সাবকিউরি
সম্পাদনা
অর্ডারযুক্ত সাবকোয়ারি ব্যবহার করে আমার মূল উত্তরটি মাইএসকিউএল ৫.7.৫ এর আগে লেখা হয়েছিল , যা পরিবর্তনের কারণে আর প্রযোজ্য নয় ONLY_FULL_GROUP_BY। পরিবর্তে উপরে বর্জন উদাহরণগুলি ব্যবহার করুন।
এটি লক্ষ করাও গুরুত্বপূর্ণ; যখন ONLY_FULL_GROUP_BYঅক্ষম থাকে (মাইএসকিউএল 5.7.5 এর পূর্বে আসল আচরণ) , GROUP BYএকটি সামগ্রিক ফাংশন ছাড়াই ব্যবহার অপ্রত্যাশিত ফলাফল আনতে পারে, কারণ মাইএসকিউএল গোষ্ঠীভুক্ত ডেটা সেটের মধ্যে যে কোনও মান চয়ন করতে পারে [sic] ।
অর্থ একটি IDবা lastnameমান পুনরুদ্ধার করা যেতে পারে যা পুনরুদ্ধার করা সারির সাথে সম্পর্কিত নয়firstname ।
সতর্কতামূলক
মাইএসকিউএল সহ GROUP BYব্যবহার করার সময় প্রত্যাশিত ফলাফল নাও পেতে পারেORDER BY
পরীক্ষার কেসের উদাহরণ দেখুন
প্রত্যাশিত ফলাফলগুলি নিশ্চিত করার জন্য বাস্তবায়নের সর্বোত্তম পদ্ধতি হ'ল আদেশযুক্ত সাবকোয়ারি ব্যবহার করে ফলাফল সেট স্কোপ ফিল্টার করা।
টেবিলের নাম ডেটা
(1, 'John', 'Doe'),
(2, 'Bugs', 'Bunny'),
(3, 'John', 'Johnson')
প্রশ্ন
SELECT * FROM (
SELECT * FROM table_name ORDER BY ID DESC
) AS t1
GROUP BY FirstName
ফলাফল
| ID | first | last |
|----|-------|---------|
| 2 | Bugs | Bunny |
| 3 | John | Johnson |
তুলনা
GROUP BYসাথে ব্যবহারের সময় অপ্রত্যাশিত ফলাফলগুলি প্রদর্শন করাORDER BY
প্রশ্ন
SELECT * FROM table_name GROUP BY FirstName ORDER BY ID DESC
ফলাফল
| ID | first | last |
|----|-------|-------|
| 2 | Bugs | Bunny |
| 1 | John | Doe |