سؤال

تبحث عن الاستعلام في ينفورميكس SQL التي سوف محاكاة الخلية group_concat وظيفة.

ماذا الخلية group_concat هل هو يخلق تعداد جميع الأعضاء في المجموعة.

حتى مع البيانات على النحو التالي:

orderid:itemName:price
      1:Paper   :10
      1:Pen     :5
      2:Sugar   :15

و الاستعلام التالي:

select group_concat(itemName), sum(price)
from order_details
group by orderid

من شأنها أن تنتج:

items    :price
Paper,Pen:15
Sugar    :15

ماذا سيكون أنجع وسيلة لتحقيق هذا في ينفورميكس?سيكون لدينا بالتأكيد إلى استخدام إجراء مخزن?

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

المحلول

سيكون لديك لتحديد المستخدم-تعريف الكلي للقيام بذلك.أن أربعة أجزاء - أربع الوظائف (البحث عن إنشاء الكلي في معرفات 12.10 مركز المعلومات):

  1. مهيئ (الحرف الأول)
  2. مكرر (ITER)
  3. الجمع (الجمع)
  4. Finalizer (النهائي)

هذه المصطلحات الرسمية في العواصم ، وهو معتدل بديهية.التفكير في حساب معدله.

  1. مهيئ:مجموعة sum = 0;N = 0
  2. التكرار:مجموعة sum += x ؛ N++
  3. الموحد:تعيين مبلغ = مبلغ 1 + sum2;مجموعة N = N1 + N2
  4. Finalizer:النتيجة = sum / N-N=0 (صفر-تقسيم) الشيكات

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

يمكنك كتابة مماثلة رمز في معرفات - استخدام الإجراءات المخزنة أو C أو جافا UDRs.

ترى حتى السؤال تظهر واحدة من العديد من علاقة الأعمدة 2 — 1 فريدة من نوعها صف (ID & قائمة مفصولة بفواصل) عن سلسلة القائم على GROUP_CONCAT() وظيفة تنفيذها في ينفورميكس.

نصائح أخرى

وهناك بالتأكيد لا وظيفة المضمنة في ينفورميكس للقيام بذلك. هل لدى أي RDBMS الرئيسية الأخرى مثل وظيفة الكلية غريبة؟ الترتيب بحسب هذا العامود لم يتم تحديد في استعلام غير مشكوك فيها قليلا، ولكن التجمع؟ هذا هو واحد جديد على لي.

وأنت سيكون لديك لكتابة إجراء مخزن أو UDR لتوليد مثل هذه البيانات. أن نكون صادقين، وأنا لن تحاول ذلك في قاعدة البيانات. يبدو وكأنه مهمة الأنسب للمستهلك من هذا الناتج (أي تطبيق / تطبيق الويب / تقرير الكاتب الخ).

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