मैं एक डमी डेटा वेयरहाउस बना रहा हूं और 2 अलग-अलग विचारों में शामिल होने की कोशिश कर रहा हूं, प्रत्येक दृश्य अपने आप ठीक काम करता है। हालाँकि, संयुक्त होने पर मेरे समूह में कथन द्वारा कुछ ऐसा प्रतीत होता है जिसके कारण डेटा गलत हो रहा है।

create view CentreSizing as
select CentreID, Name,
case
  when Capacity between 0 and 199 then 'Small'
  when Capacity between 200 and 900 then 'Medium'
  else 'Large'
end as Size
from Centre;

create view sizeQuantities as
select cs.Size, count(*) as "Occurences" from
CentreSizing cs
group by cs.Size;

create view AvgSpendings2018 as
select cs.Size, monthname(d.DateStamp) as "Month", sum(e.Cost)/quant.Occurences as 
"AverageExpense"
from Expense e join CentreSizing cs on e.CentreID = cs.CentreID
join DateTime d on e.DateTimeID = d.DateTimeID
join sizeQuantities quant on quant.Size = cs.Size
where YEAR(d.DateStamp) = 2018
group by cs.Size, MONTH(d.DateStamp);

create view TotalSpendings2018 as
select e.CentreID, c.Name, cs.Size , monthname(d.DateStamp) as "Month", sum(e.Cost) as 
"TotalExpense" from Expense e
 left join DateTime d on e.DateTimeID = d.DateTimeID
 join Centre c on c.CentreID = e.CentreID
join CentreSizing cs on c.CentreID = cs.CentreID
where year(d.DateStamp) = 2018
group by month(d.DateStamp), e.CentreID;

सभी व्यू क्रिएशन अपने आप उम्मीद के मुताबिक काम करते हैं, हालांकि जब मैं समान आकार के केंद्रों के औसत की तुलना में प्रति माह कुल खर्च दिखाने के लिए परिणामों को संयोजित करने का प्रयास करता हूं, तो परिणाम अपेक्षित नहीं होते हैं।

select ts.CentreID, ts.Name, ts.Size, ts.Month, avg.AverageExpense
from TotalSpendings2018 ts join AvgSpendings2018 avg on
ts.Size = avg.Size
Group by ts.CentreID, ts.Size, ts.Month;

| CentreID | Name                               | Size   | Month     | AverageExpense 
|
+----------+-------------------------------------+--------+-----------+---------------- 
+
|        1 | Queen Alexandra Hospital           | Large  | April     |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | August    |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | December  |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | February  |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | January   |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | July      |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | June      |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | March     |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | May       |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | November  |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | October   |      1490.0000 
|
|        1 | Queen Alexandra Hospital           | Large  | September |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | April     |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | August    |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | December  |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | February  |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | January   |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | July      |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | June      |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | March     |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | May       |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | November  |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | October   |      1490.0000 
|
|        2 | Southampton General Hospital       | Large  | September |      1490.0000 
|
|        3 | St Richard's Hospital              | Medium | April     |       445.0000 
|
|        3 | St Richard's Hospital              | Medium | August    |       445.0000 
|
|        3 | St Richard's Hospital              | Medium | December  |       445.0000 
|
0
Dan Lincoln 11 पद 2018, 20:26

1 उत्तर

सबसे बढ़िया उत्तर

देखें TotalSpendings2018 में ग्रुप बाय क्लॉज में c.Name नहीं है (यदि प्रत्येक केंद्र के लिए एक अद्वितीय नाम है, तो यह ठीक होना चाहिए)। जबकि, अधिकांश अन्य RDBMS के विपरीत, mysql इसकी अनुमति देता है, यह त्रुटि-प्रवण है और अच्छा कोडिंग अभ्यास नहीं है।

क्वेरी के संबंध में:

  • यह वास्तव में मुझे ऐसा लगता है कि आपको GROUP BY की आवश्यकता नहीं है, क्योंकि कोई एकत्रीकरण फ़ंक्शन का उपयोग नहीं किया जा रहा है (अन्यथा: ts.Name और avg.AverageExpense GROUP BY में गायब हैं)
  • विचारों के विवरण से मैं यह भी अनुमान लगाऊंगा कि आप "माह" पर शामिल होने की शर्त खो रहे हैं, क्योंकि यह कॉलम दोनों दृश्यों में उपलब्ध है
  • आप आउटपुट में TotalExpense क्यों नहीं दिखा रहे हैं? मैंने सोचा होगा कि आप यही करना चाह रहे थे (अन्यथा, आपको इसमें शामिल होने की आवश्यकता नहीं है)

मेरी (उम्मीद से शिक्षित) आपकी क्वेरी पर अनुमान लगाती है:

select 
    ts.CentreID,
    ts.Name, 
    ts.Size, 
    ts.Month, 
    avg.AverageExpense,
    ts.TotalExpense
from
    TotalSpendings2018 ts 
    join AvgSpendings2018 avg 
    on ts.Size = avg.Size
    and ts.Month = avg.Month
1
GMB 11 पद 2018, 18:07