यहां एक दृष्टिकोण है जो काम पूरा कर सकता है। तर्क मध्यवर्ती गणना करने के लिए कुल उपश्रेणियों का उपयोग करना है।
यह क्वेरी On_sale
. से आय प्राप्त करती है साल दर टेबल।
SELECT
YEAR(sale_date) yr,
SUM(sale_price) amt
FROM
On_sale
GROUP BY
YEAR(sale_date);
यह अन्य क्वेरी Sold
tables टेबल का उपयोग करके प्रति स्टोर और प्रति वर्ष राजस्व प्राप्त करती है और Product
:
SELECT
s.store_number,
YEAR(s.sold_date) yr,
SUM(s.sold_quantity * p.retail_price) amt
FROM
Sold s
INNER JOIN Product p
ON p.pid = s.pid
GROUP BY
s.store_number,
YEAR(sold_date);
अब हम JOIN
कर सकते हैं City
. के साथ इन प्रश्नों के परिणाम और Store
टेबल। साथ ही, हम शहरों को विभिन्न आकार श्रेणियों में विभाजित कर सकते हैं और परिणामों को एकत्रित करने के लिए इसका उपयोग कर सकते हैं। मैं LEFT JOIN
का उपयोग कर रहा हूं यदि उपश्रेणियों में से कोई एक खाली परिणाम देता है (अन्यथा, INNER JOIN
ठीक है):
SELECT
COALESCE(sa.yr, so.yr) sale_year,
CASE
WHEN c.population > 200 THEN 'large'
WHEN c.population <= 200 AND c.population > 100 THEN 'medium'
ELSE 'small'
END as size_range,
SUM(COALESCE(so.amt, 0) + COALESCE(sa.amt, 0)) revenue
FROM
City c
INNER JOIN Store st
ON st.state = c.state
AND st.city_name = c.city_name
LEFT JOIN (
SELECT
s.store_number,
YEAR(s.sold_date) yr,
SUM(s.sold_quantity * p.retail_price) amt
FROM
Sold s
INNER JOIN Product p
ON p.pid = s.pid
GROUP BY
s.store_number,
YEAR(sold_date)
) so
ON so.store_number = st.store_number
LEFT JOIN (
SELECT
YEAR(sale_date) yr,
SUM(sale_price) amt
FROM
On_sale
GROUP BY
YEAR(sale_date)
) sa
ON sa.yr = so.yr
GROUP BY
sale_year,
size_range
ORDER BY
sale_year,
size_range
यह DB Fiddle पर डेमो आपके नमूना डेटा के साथ मध्यवर्ती चरणों को प्रदर्शित करता है, और अंत में वापस आता है:
| sale_year | size_range | revenue |
| --------- | ---------- | ------- |
| 2017 | small | 15 |
| 2018 | medium | 14 |
| 2019 | large | 12 |