4 الجدول الانضمام بحيث أن 1 فقط استجابة يعطى لكل شركة بدلا من نتيجة لكل حملة

StackOverflow https://stackoverflow.com/questions/1407359

  •  05-07-2019
  •  | 
  •  

سؤال

شكرا على مساعدتكم!

أود أن إخراج جميع companyName المشاركات التي التحميلات عبر أي من serverFiles مثل:

الشركات.companyName - عدد(ملفات.fileID) - مبلغ(serverFiles.uniqueUploads)

Initech Ltd.   -  11 -  24931
Epiphyte  Inc.  -  23  - 938821

وهنا relavent أجزاء من بنية الجدول:

الجدول:الشركات

companyID (INT)  -  companyName (TEXT)

الجدول:حملات

campaignID(INT)  -  companyID (INT)

الجدول:الملفات

fileID (INT)  -  campaignID (INT)

الجدول:serverFiles serverFileID (الباحث) - fileID (الباحث) - uniqueUploads(الباحث)

كل شركة يمكن أن يكون لديك عدة حملات.

كل حملة يمكن أن يكون لها ملفات متعددة.

يمكن أن يكون لكل ملف متعددة serverFiles

الاستعلام حاولت استخدام على النحو التالي:

SELECT companies.companyName, sum(serverFiles.uniqueUploads), count(files.fileID)
FROM companies
INNER JOIN campaigns on companies.companyID = campaigns.companyID
INNER JOIN files on files.campaign = campaigns.campaignID
LEFT OUTER JOIN serverFiles on serverfiles.fileID = files.fileID
GROUP BY serverFiles.uniqueUploads, files.fileID
ORDER BY sum(serverFiles.uniqueUploads) DESC;

ومع ذلك ، فإن هذا يعود مداخل متعددة لكل شركة (كما يخلق نواتج متعددة لكل شركة واحدة لكل حملة تحت الشركة).

على سبيل المثال:

الشركات.companyName - عدد(ملفات.fileID) - مبلغ(serverFiles.uniqueUploads)

Initech Ltd.   -  2 -  234234     (for initech campaign1)
Initech Ltd.   -  4 -  223323    (for initech campaign2)
Epiphyte  Inc.  -  13  - 6434   (for epiphyte campaign1)
Initech Ltd.   -  1 -  554     (for initech campaign3)
Epiphyte  Inc.  -  13  - 7544   (for epiphyte campaign2)
Epiphyte  Inc.  -  11  - 74545   (for epiphyte campaign3)
Epiphyte  Inc.  -  23  - 456544   (for epiphyte campaign4)

كيف يمكنني تغيير الاستعلام فقط أعطني واحد رد لكل شركة ، تلخيص جميع الحملات في إطار تلك الشركة.

شكرا جزيلا على المساعدة.

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

المحلول

الاستعلام الخاص بك على ما يرام ، أعتقد ، باستثناء مجموعة BY.يجب أن يكون

GROUP BY companies.companyName

نصائح أخرى

إضافة اسم الشركة إلى مجموعة وإجراء مين/ماكس لانتزاع واحدة في قائمة التحديد.

SELECT MAX(companies.companyName), sum(serverFiles.uniqueUploads), count(files.fileID)
FROM companies
INNER JOIN campaigns on companies.companyID = campaigns.companyID
INNER JOIN files on files.campaign = campaigns.campaignID
LEFT OUTER JOIN serverFiles on serverfiles.fileID = files.fileID
GROUP BY companies.companyName, serverFiles.uniqueUploads, files.fileID
ORDER BY sum(serverFiles.uniqueUploads) DESC;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top