نسبت درصد چند ردیف به کل ردیفها با Group By در Sql
من دیتابیس فروش یک رستوران با چند شعبه دارم,در جدول sale invoice BranchId و StateId رو دارم. StateId در اینجا نوع فاکتور رو مشخص میکنه.
مثلا ثبت دارای stateid = 1 و ویرایش 2 و حذف 4 و غیره که در جدول states تعریف شدن .من کویری میخام که بتونم نسبت تعداد هر کدوم از این نوع فاکتورها رو به تعداد فاکتورهایی که StateId = 1 دارن بازای هر شعبه داشته باشم, (از اونجاییکه واژه ها بهم ریختن در اخر خط اول اسم جدول SaleInvoice هست و دو فیلد StateId و BranchId رو داخلش دارم)
در اصل میخام مثلا نسبت فاکتور حذفی به ثبت یا ویرایش به ثبت رو بازای هر شعبه بدست بیارم.
پاسخ هوش مصنوعی
برای رسیدن به هدف شما، می توانید از یک کویری SQL استفاده کنید که تعداد فاکتورها را گروه بندی کرده و نسبت انواع مختلف فاکتورها را نسبت به تعداد فاکتورهایی که StateId = 1
دارند، محاسبه کند. در زیر یک مثال از این کویری آورده شده است:
SELECT
BranchId,
StateId,
COUNT(*) * 1.0 / NULLIF(SUM(CASE WHEN StateId = 1 THEN 1 ELSE 0 END), 0) AS Ratio
FROM
SaleInvoice
GROUP BY
BranchId, StateId
HAVING
StateId IN (1, 2, 4) -- فقط انواع فاکتورهای مورد نظر
ORDER BY
BranchId, StateId;
در این کویری:
- با استفاده از
COUNT(*)
تعداد فاکتورها برای هر شعبه و هر نوع فاکتور محاسبه می شود. - نسبت تعداد فاکتورها به تعداد فاکتورهایی با
StateId = 1
با استفاده ازSUM(CASE WHEN StateId = 1 THEN 1 ELSE 0 END)
محاسبه می شود. - برای جلوگیری از تقسیم بر صفر، از تابع
NULLIF
استفاده شده است. - فیلتر
HAVING
تنظیم شده تا فقط انواع خاص فاکتورها (ثبت، ویرایش، حذف) بررسی شوند.
البته سوال شما کمی دارای ابهام هست. فرض کنید جدولی دارید که دارای :
- 5 رکورد با StateID برابر با 1
- 2 رکورد با StateID برابر با 2
- 6 رکورد با StateID برابر با 3
هست. یعنی این جدول مجموعا 13 رکورد داره. حالا شما میخواید ببینید نسبت مجموع هر رکورد نسبت به کل رکوردها چقدر هست.
الان میخوایم ببینیم تعداد رکوردهایی که StateID اونها برابر با 3 هست چند درصد از تعداد کل رکوردهاست. برای این کار از کوئری زیر استفاده کنید :
SELECT StateID,
StateID * 100.0 / SUM(StateID) OVER () AS Percentage
FROM myStateTbl
GROUP BY StateID;
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- حذف کامل یک رکورد در جدول ریلیشن شده
- مقایسه ساختار دو دیتابیس در Sql Server
- اشکال در ایجاد کلید خارجی در Sql Server
- تفاوت اوراکل و Sql Server چیست
- جابه جایی سطر و ستون در Sql Server
- استفاده از Stored Procedure در انتیتی فریم ورک code First
- آپدیت لیستی از رکوردها در Sql Server - آپدیت گروهی اطلاعات در Sql Server
- دلیل پرش 1000 تایی خودکار فیلد identity در Sql server
- مشکل نمایش ندادن Data Type موقع تایپ در Sql Server
- کار با تاریخ شمسی وساعت (استفاده از توابع )