4 الجدول الانضمام بحيث أن 1 فقط استجابة يعطى لكل شركة بدلا من نتيجة لكل حملة
سؤال
شكرا على مساعدتكم!
أود أن إخراج جميع 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;