با استفاده از تابع SEC_TO_TIME در MySQL، برای هر user_id در جدول sessions که ستون duration_seconds (مدت به ثانیه) دارد، مجموع ثانیه‌ها را محاسبه کرده و حاصل را به فرمت HH:MM:SS نمایش دهید.

10.0 بازدید آخرین ویرایش در 199 روز قبل ساعت 23:32

0.0

برای حل این مسئله از MySQL و توابع مجموعه‌ای و زمانی استفاده کنید؛ کافی است SUM(duration_seconds) را برای هر user_id محاسبه کرده و نتیجه را داخل SEC_TO_TIME قرار دهید: SELECT user_id, SEC_TO_TIME(SUM(duration_seconds)) AS total_time FROM sessions GROUP BY user_id; توجه داشته باشید که مقدار زمان خروجی در بازهٔ مجاز نوع TIME قرار دارد و در صورت نیاز به نمایش روزها باید مجموع ثانیه‌ها را به صورت دستی به روز و باقیماندهٔ ساعت/دقیقه/ثانیه تبدیل کنید (مثلاً با FLOOR(SUM/86400) برای روزها و MOD/SUM برای باقیمانده).

توسط پژوهشگر در 199 روز قبل ساعت 23:32
دسته بندی ها: MySQL MySQL for beginner
arman در 199 روز قبل ساعت 23:33

برای نمایش مجموع ثانیه‌ها به صورت HH:MM:SS می‌توانید SUM(duration_seconds) را به SEC_TO_TIME بدهید تا خروجی به‌صورت زمانی نمایش یابد. توجه کنید که نوع TIME بازه‌ی محدودی دارد (حدود ±838:59:59) و اگر مجموع ثانیه‌ها از این بازه بیشتر شود خروجی ممکن است نامعتبر یا NULL شود؛ در این حالت روزها را با FLOOR(SUM/86400) جدا کرده و باقیمانده را با SEC_TO_TIME(MOD(SUM,86400)) فرمت کنید. برای دقت و کارایی بهتر مجموع‌ها را با نوع عددی مناسب (مثلاً BIGINT) محاسبه کنید و در صورت حجم زیاد از تجمیع قبلی یا ایندکس مناسب استفاده نمایید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری