Aggregation এবং Group By হল SQL এর গুরুত্বপূর্ণ কৌশল, যা ডেটাবেসে ডেটা সংগ্রহ, বিশ্লেষণ এবং গ্রুপিং করার জন্য ব্যবহৃত হয়। NHibernate তে আপনি SQL কুয়েরির মাধ্যমে Aggregation (যেমন, COUNT, SUM, AVG) এবং Group By কৌশল ব্যবহার করতে পারেন, যেগুলি খুবই কার্যকরী যখন আপনাকে ডেটার সারাংশ বা গ্রুপিং তথ্য বের করতে হয়।
NHibernate তে Aggregation এবং Group By ব্যবহারের জন্য আপনাকে HQL (Hibernate Query Language) বা Criteria API ব্যবহার করতে হবে। এখানে আমরা HQL এবং Native SQL উভয়ের মাধ্যমে এই কৌশলগুলো ব্যবহার করার উদাহরণ দেখব।
1. Aggregation Functions (অ্যাগ্রিগেশন ফাংশন)
Aggregation Functions হল SQL ফাংশন যা একাধিক রেকর্ডের উপর গণনা বা হিসাব করতে ব্যবহৃত হয়। NHibernate এ এই ধরনের ফাংশন ব্যবহার করতে পারেন HQL বা Criteria দিয়ে।
Aggregation Functions এর মধ্যে কিছু সাধারণ ফাংশন হলো:
COUNT(): নির্দিষ্ট শর্ত পূর্ণ করা রেকর্ডের সংখ্যাSUM(): নির্দিষ্ট কলামের মানের যোগফলAVG(): নির্দিষ্ট কলামের মানের গড়MIN(): নির্দিষ্ট কলামের সর্বনিম্ন মানMAX(): নির্দিষ্ট কলামের সর্বোচ্চ মান
2. Aggregation ব্যবহার HQL দিয়ে
2.1 COUNT() ব্যবহার করে
ধরা যাক, আমাদের কাছে Employee নামে একটি টেবিল রয়েছে এবং আমরা দেখতে চাই কতটি Employee রেকর্ড রয়েছে।
using (var session = sessionFactory.OpenSession())
{
var query = session.CreateQuery("select count(e) from Employee e");
var employeeCount = query.UniqueResult<long>(); // COUNT() ফলাফল
Console.WriteLine($"Total Employees: {employeeCount}");
}
এখানে:
count(e)ফাংশনটি Employee টেবিলের মোট রেকর্ডের সংখ্যা গণনা করছে।
2.2 SUM() ব্যবহার করে
ধরা যাক, আপনি জানাতে চান মোট Salary (বেতন) কত, তাহলে আপনি SUM() ফাংশন ব্যবহার করতে পারেন।
using (var session = sessionFactory.OpenSession())
{
var query = session.CreateQuery("select sum(e.salary) from Employee e");
var totalSalary = query.UniqueResult<decimal>(); // SUM() ফলাফল
Console.WriteLine($"Total Salary: {totalSalary}");
}
এখানে:
sum(e.salary)ফাংশনটি সব Employee রেকর্ডের salary এর যোগফল বের করছে।
3. Group By ব্যবহার HQL দিয়ে
Group By হল SQL এর একটি কৌশল যা ডেটাকে কিছু নির্দিষ্ট কলামের ভিত্তিতে গ্রুপ করে। NHibernate এর HQL এ Group By ব্যবহার করা খুবই সহজ।
3.1 Group By ব্যবহার
ধরা যাক, আপনি Department অনুসারে Employee গুলির গড় বেতন দেখতে চান।
using (var session = sessionFactory.OpenSession())
{
var query = session.CreateQuery("select e.department, avg(e.salary) from Employee e group by e.department");
var result = query.List<object[]>(); // Each result will be an object array with department and average salary
foreach (var row in result)
{
var department = row[0].ToString();
var avgSalary = Convert.ToDecimal(row[1]);
Console.WriteLine($"Department: {department}, Average Salary: {avgSalary}");
}
}
এখানে:
group by e.departmentদিয়ে Employee গুলিকে Department এর ভিত্তিতে গ্রুপ করা হয়েছে এবং প্রতি ডিপার্টমেন্টের গড় বেতন (AVG) বের করা হয়েছে।avg(e.salary)হল অ্যাগ্রিগেশন ফাংশন যা গড় বেতন গণনা করছে।
4. Native SQL ব্যবহার Aggregation এবং Group By
NHibernate তে আপনি Native SQL কুয়েরি দিয়ে সরাসরি SQL রেজাল্ট ও Aggregation ফাংশন ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে Native SQL ব্যবহার করে Group By এবং Aggregation করা হচ্ছে।
4.1 Native SQL Query দিয়ে Group By এবং Aggregation
ধরা যাক, আমরা Employee টেবিল থেকে Department অনুসারে Salary এর গড় এবং মোট সংখ্যা জানতে চাই।
using (var session = sessionFactory.OpenSession())
{
var sqlQuery = session.CreateSQLQuery("SELECT e.Department, AVG(e.Salary), COUNT(e.EmployeeId) FROM Employee e GROUP BY e.Department");
var result = sqlQuery.List<object[]>(); // List of results where each item is an array of values
foreach (var row in result)
{
var department = row[0].ToString();
var avgSalary = Convert.ToDecimal(row[1]);
var employeeCount = Convert.ToInt32(row[2]);
Console.WriteLine($"Department: {department}, Average Salary: {avgSalary}, Employee Count: {employeeCount}");
}
}
এখানে:
- Native SQL কুয়েরি চালিয়ে আমরা Department অনুসারে Salary এর গড় (AVG) এবং কর্মচারীদের মোট সংখ্যা (COUNT) বের করেছি।
SELECT e.Department, AVG(e.Salary), COUNT(e.EmployeeId)হল SQL কুয়েরির অংশ যেখানে GROUP BY ব্যবহার করা হয়েছে।
5. Criteria API ব্যবহার Aggregation এবং Group By
NHibernate এর Criteria API ব্যবহার করে আপনি অ্যাগ্রিগেশন এবং গ্রুপিং ফিচারও ব্যবহার করতে পারেন। এটি টেপলেট কৌশল, যা কমপ্লেক্স কুয়েরি তৈরি করতে সাহায্য করে।
5.1 Criteria API দিয়ে Aggregation
using (var session = sessionFactory.OpenSession())
{
var criteria = session.CreateCriteria<Employee>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.Count("EmployeeId"))
.Add(Projections.Sum("Salary"))
);
var result = criteria.List<object[]>();
foreach (var row in result)
{
var employeeCount = Convert.ToInt32(row[0]);
var totalSalary = Convert.ToDecimal(row[1]);
Console.WriteLine($"Total Employees: {employeeCount}, Total Salary: {totalSalary}");
}
}
এখানে:
- Criteria API ব্যবহার করে COUNT() এবং SUM() ফাংশনগুলো ব্যবহার করা হয়েছে।
Projections.CountএবংProjections.Sumব্যবহার করা হয়েছে অ্যাগ্রিগেশন ফাংশন হিসেবে।
5.2 Group By Criteria API দিয়ে
using (var session = sessionFactory.OpenSession())
{
var criteria = session.CreateCriteria<Employee>()
.SetProjection(Projections.ProjectionList()
.Add(Projections.GroupProperty("Department"))
.Add(Projections.Avg("Salary"))
);
var result = criteria.List<object[]>();
foreach (var row in result)
{
var department = row[0].ToString();
var avgSalary = Convert.ToDecimal(row[1]);
Console.WriteLine($"Department: {department}, Average Salary: {avgSalary}");
}
}
এখানে:
Projections.GroupProperty("Department")ব্যবহার করে Group By করা হয়েছে এবং AVG() ব্যবহার করে Salary এর গড় বের করা হয়েছে।
সারাংশ
Aggregation এবং Group By হল শক্তিশালী কৌশল যা আপনাকে ডেটাবেসের বিশাল পরিমাণ ডেটার উপর বিভিন্ন পরিসংখ্যান বের করতে সাহায্য করে। NHibernate এ HQL, Native SQL, এবং Criteria API ব্যবহার করে আপনি সহজেই অ্যাগ্রিগেশন ফাংশন এবং গ্রুপিং ফিচার ব্যবহার করতে পারেন। এই কৌশলগুলি ডেটা বিশ্লেষণ এবং রিপোর্ট তৈরির জন্য খুবই কার্যকরী।
Read more