মডিউল পাঠ (2/4)
উইন্ডো ফাংশন: র্যাঙ্কিং এবং প্রতি-গ্রুপ গণনা
একটি উইন্ডো ফাংশন হল একটি ফাংশন যা "সারিগুলির গ্রুপ" এ কাজ করে
(উইন্ডো) কিন্তু — GROUP BY এর বিপরীতে — এর সংখ্যা কমায় না
সারি: উইন্ডোর উপর গণনা করা একটি মান প্রতিটি সারির সাথে সংযুক্ত থাকে
চূড়ান্ত ফলাফল।
এটি র্যাঙ্কিং, প্রগতিশীল সংখ্যা, শতাংশের জন্য সঠিক টুল
একটি গ্রুপ মোটের উপর, এবং অন্যান্য অনেক অপারেশন যা বিশ্রী বা
GROUP BY এর সাথে অসম্ভব।
সিনট্যাক্স: function() OVER (…)
ROW_NUMBER() OVER (PARTITION BY colonna ORDER BY colonna2)উপাদান:
PARTITION BY— "গ্রুপ" সংজ্ঞায়িত করে (যেমনGROUP BY, কিন্তু সারিগুলি আলাদা থাকুন);ORDER BYOVER(…)-এর ভিতরে — এর মধ্যে অর্ডারটি সংজ্ঞায়িত করে বিভাজন
OVER () (খালি বন্ধনী) মানে "একটি উইন্ডো হিসাবে পুরো টেবিল"।
"মোট শতাংশের" মত গণনার জন্য দরকারী।
র্যাঙ্কিং ফাংশন
ROW_NUMBER() OVER (PARTITION BY p ORDER BY o)
RANK() OVER (PARTITION BY p ORDER BY o)
DENSE_RANK() OVER (PARTITION BY p ORDER BY o)পার্থক্য (মান সহ 100, 100, 90, 80):
| ফাংশন | পদ |
|---|---|
ROW_NUMBER | 1, 2, 3, 4 (সর্বদা অনন্য) |
RANK | 1, 1, 3, 4 (বন্ধন একটি অবস্থান ভাগ করে, ** "ফাঁক" ছেড়ে দেয়) |
DENSE_RANK | 1, 1, 2, 3 (বন্ধন একটি অবস্থান ভাগ করে, ফাঁক ছাড়া) |
উদাহরণ: বিভাগ প্রতি পণ্য র্যাঙ্কিং
SELECT name,
category_id,
price,
RANK() OVER (PARTITION BY category_id ORDER BY price DESC) AS rank
FROM products
ORDER BY category_id, rank;প্রতিটি category_id এর জন্য RANK 1 থেকে পুনঃসূচনা হয় এবং নিচের দিকে অর্ডার দেয়
মূল্য: আপনি পণ্যের র্যাঙ্কিং পাবেন এর মধ্যে প্রতিটি বিভাগে, একটিতে
গুলি
প্রগতিশীল সংখ্যায়ন
-- Progressive order number for each customer:
SELECT id,
customer_id,
ordered_at,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY ordered_at) AS row_num
FROM orders
ORDER BY customer_id, row_num;প্রতিটি গ্রাহকের প্রথম অর্ডারে থাকবে row_num = 1, দ্বিতীয়টিতে 2, ইত্যাদি।
চেষ্টা করে দেখুন
প্রতিটি পণ্যের জন্য নাম, category_id, মূল্য এবং র্যাঙ্ক দেখান (বিভাগের মধ্যে দাম কমিয়ে র্যাঙ্কিং; RANK ব্যবহার করুন)। ক্রমবর্ধমান বিভাগ_আইডি এবং ক্রমবর্ধমান ক্রম অনুসারে।
ইঙ্গিত দেখান
বিভাগ_আইডি গ্রুপ দ্বারা বিভাজন, গ্রুপের মধ্যে মূল্য DESC অর্ডার অনুসারে অর্ডার করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
প্রতিটি অর্ডারের জন্য id, customer_id, ordered_at এবং row_num দেখান (গ্রাহক প্রতি প্রগতিশীল ROW_NUMBER, ক্রমবর্ধমান অর্ডারে অর্ডার করা হয়েছে)। customer_id এবং row_num দ্বারা অর্ডার করুন।
ইঙ্গিত দেখান
পার্টিশনের মধ্যে ROW_NUMBER সর্বদা অনন্য।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ