سؤال

باختصار لدي طاولتان:

المستخدمون:

------------------------
UserID   |   Name
------------------------
0     a
1     b
2     c

CALLS:
------------------------
ToUser   |   Result
------------------------
0     ANSWERED
1     ENGAGED
1     ANSWERED
0     ANSWERED

الخ ، وما إلى ذلك (أستخدم مرجعًا رقميًا للنتيجة في الواقع)

لدي أكثر من مليوني سجل كل تفاصيل مكالمة إلى عميل معين. أنا حاليًا أستخدم عبارات الحالة لحساب كل استثمار لنتيجة معينة بعد أن قمت بالفعل بإجراء إجمالي سريع:

COUNT(DISTINCT l_call_log.line_id),
COALESCE (SUM(CASE WHEN l_call_log.line_result = 1 THEN 1 ELSE NULL END), 0) AS [Answered],
COALESCE (SUM(CASE WHEN l_call_log.line_result = 2 THEN 1 ELSE NULL END), 0) AS [Engaged], 
COALESCE (SUM(CASE WHEN l_call_log.line_result = 4 THEN 1 ELSE NULL END), 0) AS [Unanswered]

هل أقوم 3 بمسح للبيانات بعد إجمالي العدسي؟ إذا كان الأمر كذلك ، هل هناك طريقة يمكنني من خلالها عملية مسح واحدة وحساب المكالمات حسب الدقة؟

شكرًا.

هل كانت مفيدة؟

المحلول

هذا سيستغرق فحص الجدول الكامل.

تعديل: لا توجد معلومات كافية للإجابة عليها ؛ نظرًا لأن الإزالة المكررة (متميزة) التي فاتني سابقًا ، لا يمكننا معرفة الإستراتيجية التي سيتم استخدامها .... خاصةً دون معرفة محرك قاعدة البيانات.

في كل محرك استعلام رئيسي تقريبًا ، يتم تنفيذ كل وظيفة إجمالية لكل عمود لكل صف ، وقد تستخدم نتيجة مخزنة مؤقتًا (مثل العد (*) على سبيل المثال).

هل line_result مفهرسة؟ إذا كان الأمر كذلك ، فيمكنك الاستفادة من استعلام أفضل (Group by + Count (*) للاستفادة من إحصائيات الفهرس ، على الرغم من أنني لست متأكدًا مما إذا كان هذا جديراً بالاهتمام وفقًا لجداولك الأخرى في الاستعلام.

نصائح أخرى

هنالك ال GROUP BY البناء في SQL. محاولة:

SELECT COUNT(DISTINCT l_call_log.line_id)
  GROUP BY l_call_log.line_result

أعتقد أنه مسح الجدول ، حيث ليس لديك أي تعتمد على الفائزين الفرعيين. قم بتشغيل شرح في الاستعلام للتأكد.

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