سؤال

لدي جدول تخزين بيانات المعاملات للمستخدمين.للعثور على المستخدمين تصنيف تأخذ متوسط درجة آخر 10 إدخالات المستخدم.هل هناك طريقة للحصول على هذا مع SQL ؟

أنا بحاجة إلى أن تكون قادرة على العمل بها لمستخدم واحد بالنظر إلى هوياتهم.و للحصول على قائمة من كافة المستخدمين أمر بها درجة.

حاليا أنا أعمل بها خارج الخلية وتخزينها في آخر عمود لكل مستخدم حتى أستطيع أن ORDER_BY ذلك.

# returns average for all transactions.
SELECT user_id, AVG(score) FROM transactions WHERE user_id = 1
# returns scores for last 10 transactions.
SELECT user_id, score FROM transactions WHERE user_id = 1 ORDER_BY date DESC LIMIT 10
هل كانت مفيدة؟

المحلول

استخدام:

  SELECT x.user_id,
         AVG(x.score)
    FROM (SELECT t.user_id,
                 t.score
            FROM TRANSACTIONS t
           WHERE t.user_id = ?
        ORDER BY t.date
           LIMIT 10) x
GROUP BY x.user_id

نصائح أخرى

مجرد الجمع بين اثنين من الاستفسارات بالفعل في استخدام:

SELECT user_id, AVG(score)
FROM transactions
WHERE rowid in (
    SELECT rowid
    FROM transactions
    WHERE user_id = 1
    ORDER_BY date DESC
    LIMIT 10)

حيث rowid هو مهما في تحديد هويةهو.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top