با استفاده از تابع ROW_NUMBER در MySQL برای هر customer_id سفارشها را بر اساس مقدار amount به صورت نزولی شمارهگذاری کن و فقط ردیف اول (بزرگترین سفارش) برای هر مشتری را نمایش بده.
4.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:43 0.0
در MySQL 8.0 به بعد میتوانید از ROW_NUMBER() به همراه OVER(PARTITION BY ... ORDER BY ...) استفاده کنید: ابتدا در یک CTE یا زیرپرسوجو مقدار ROW_NUMBER را محاسبه کنید، سپس ردیفهایی که row_num = 1 هستند را فیلتر کنید. نکتهها: مطمئن شوید از MySQL 8+ استفاده میکنید، در صورت تساوی مقدار amount میتوانید ستون دیگری مانند order_date را به ORDER BY اضافه کنید تا نتیجه قطعی باشد؛ اگر نسخه قدیمی دارید باید از زیرپرسوجوی همبسته یا JOIN استفاده کنید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای اجرا در MySQL 8+ از ROW_NUMBER() با OVER(PARTITION BY customer_id ORDER BY amount DESC) استفاده کنید و آن را در یک CTE یا زیربرنامه محاسبه کنید تا مقدار row_num به دست آید. سپس ردیفهایی که row_num = 1 هستند را فیلتر کنید تا فقط بزرگترین سفارش هر مشتری نمایش داده شود. در صورت تساوی مقدار amount، میتوانید ORDER BY را با اضافه کردن یک ستون ثانوی مانند order_date DESC قطعی کنید. اگر از نسخههای قدیمیتر MySQL استفاده میکنید یا به دنبال عملکرد بهتری هستید، به جای ROW_NUMBER از زیربرنامه همبسته یا JOIN همراه با ایندکس مناسب (customer_id, amount, order_date) استفاده کنید.
گزارش