با استفاده از تابع 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 استفاده کنید.

توسط پژوهشگر در 221 روز قبل ساعت 01:43
دسته بندی ها: MySQL MySQL for beginner
arash در 221 روز قبل ساعت 12:14

برای اجرا در 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) استفاده کنید.

گزارش

1 پاسخ

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

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