دسته بندی ها
14:10 1401/04/13

نسبت درصد چند ردیف به کل ردیفها با Group By در Sql

مشخصات سوال کننده :
کاربر : Elham_1444     امتیاز کاربر : 0     رتبه کاربر : 7060
دسته بندی : Sql Server

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3333
1 نظر
saedbfd : ای کاش یک تصویر از ستونهای جدول و تعدادی از رکوردهایی که در این جدول هست رو نمایش می دادید تا بهتر بشه متوجه منظور شما شد و کوئری هم که نوشته بشه دقیق تر باشه.

امتیاز کاربر : 1664   رتبه کاربر : 1   تاریخ ثبت : 02:16 1401/04/13
هوش مصنوعی

پاسخ هوش مصنوعی

برای رسیدن به هدف شما، می توانید از یک کویری 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 تنظیم شده تا فقط انواع خاص فاکتورها (ثبت، ویرایش، حذف) بررسی شوند.
به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 16:56 1401/04/13

البته سوال شما کمی دارای ابهام هست. فرض کنید جدولی دارید که دارای :

  • 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;

 

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود