با استفاده از تابع ROW_NUMBER در MySQL، برای هر دستهبندی (category) در جدول sales ردیفها را بر اساس مقدار amount به صورت نزولی شمارهگذاری کنید و فقط ردیفهایی که شمارهٔ آنها برابر 1 (بالاترین فروش هر دسته) هستند را نمایش دهید.
3.0 بازدید آخرین ویرایش در 202 روز قبل ساعت 02:45 0.0
برای حل این مسئله از تابع پنجرهای ROW_NUMBER() در MySQL 8+ استفاده کنید: ROW_NUMBER() OVER (PARTITION BY category ORDER BY amount DESC) را در یک زیرپرسوجو یا CTE محاسبه کنید و سپس در بیرونِ آن فقط ردیفهایی با rn = 1 را فیلتر نمایید. نکتهها: اگر نسخه MySQL شما قدیمی است بهجای تابع پنجرهای باید از روشهای جایگزین مانند JOIN با زیرپرسوجوی حاوی MAX(amount) استفاده کنید؛ مطمئن شوید ستونهای دستهبندی و مرتبسازی درست انتخاب شدهاند.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
استفاده از ROW_NUMBER() بهعنوان یک تابع پنجرهای در MySQL 8+ برای شمارهگذاری هر دستهبندی بر اساس amount نزولی کارآمد است. با استفاده از ROW_NUMBER() OVER (PARTITION BY category ORDER BY amount DESC) در زیرپرسوجو یا CTE، مقدار rn برای هر دسته مشخص میشود و در نتیجه فقط ردیفهای rn = 1 نمایش داده میشود. اگر بهدلیل وجود مقادیر برابر مقدار بالای هر دسته، قصد دارید همه رکوردهای همارزش را بگیرید، از RANK() یا DENSE_RANK() استفاده کنید یا یک منبع تمایز مانند id را اضافه کنید. اگر نسخه شما قدیمی است یا ROW_NUMBER در دسترس نیست، از JOIN با زیرپرسوجوی حاوی حداکثر amount برای هر دسته استفاده کنید و اطمینانیابید بهاندازهٔ صحیح ایندکسهای روی category و amount دارید.
گزارش