मैं एक कठिन समय चल रहा है की तुलना में मैं एक प्रश्न है कि कुल कार्य शामिल हैं, कई टेबल, और सही संख्या में परिणाम प्रश्नों लिखने और मैं कुछ मदद मिल सकती है उम्मीद कर रहा उम्मीद करेंगे।एकाधिक तालिकाओं की पूछताछ करते समय कुल कार्यों का सटीक रूप से उपयोग कैसे करें?
श्रेणी तालिका उदाहरण
श्रेणी मैं क्या पर रिपोर्ट करने की आवश्यकता है:
|----|-----------|
| id | name |
|----|-----------|
| 1 | furniture |
| 2 | music |
| 3 | kitchen |
| 4 | adventure |
|----|-----------|
उत्पाद तालिका उदाहरण
उत्पाद तालिका उदाहरण:
+०१२३५१६४१०६१|-----|----------------|-------------|
| id | name | category_id |
|-----|----------------|-------------|
| 101 | couch | 1 |
| 102 | chair | 1 |
| 103 | drum | 2 |
| 104 | flute | 2 |
| 105 | pot | 3 |
| 106 | pan | 3 |
| 107 | kitchen sink | 3 |
| 108 | unicorn saddle | 4 |
| 109 | unicorn shoes | 4 |
| 110 | horse shampoo | 4 |
|-----|----------------|-------------|
गतिविधि तालिका उदाहरण
विचारों डेटा हम (श्रेणी के द्वारा) योग करने के लिए चाहते हैं गतिविधि तालिका में पाया:
|----|------------|-------|
| id | product_id | views |
|----|------------|-------|
| 1 | 101 | 1000 |
| 2 | 102 | 2000 |
| 3 | 103 | 3000 |
| 4 | 104 | 4000 |
| 5 | 105 | 5000 |
| 6 | 106 | 6000 |
| 7 | 107 | 7000 |
| 8 | 108 | 8000 |
| 9 | 109 | 9000 |
| 10 | 110 | 10000 |
|----|------------|-------|
बिक्री तालिका उदाहरण
बिक्री तालिका कि हम औसत बिक्री (फिर श्रेणी के अनुसार) पूछना चाहते हैं। ध्यान दें कि विक्रेता_आईडी महत्वपूर्ण है क्योंकि एक ही उत्पाद कई विक्रेताओं द्वारा किया जा सकता है। मैं विक्रेता तालिका छोड़ रहा हूं क्योंकि इस प्रश्न के लिए इसकी आवश्यकता नहीं है (हम केवल बाद के उदाहरणों में विक्रेता आईडी का उपयोग कर पूछ सकते हैं)।
|----|------------|-----------|--------|
| id | product_id | vendor_id | amount |
|----|------------|-----------|--------|
| 1 | 101 | 1 | 1000 |
| 2 | 102 | 1 | 900 |
| 3 | 103 | 1 | 2000 |
| 4 | 105 | 1 | 3000 |
| 5 | 107 | 1 | 5000 |
| 6 | 101 | 2 | 600 |
| 7 | 103 | 2 | 7000 |
| 8 | 105 | 2 | 8000 |
| 9 | 107 | 2 | 1000 |
| 10 | 108 | 1 | 500 |
| 11 | 109 | 1 | 600 |
| 12 | 108 | 2 | 400 |
| 13 | 109 | 2 | 500 |
|----|------------|-----------|--------|
वांछित आउटपुट
नीचे वांछित आउटपुट है:
** ध्यान दें कि कुछ विक्रेताओं कुछ उत्पादों को ले जाने नहीं करते हैं, इसलिए, जिसका अर्थ है कोई औसत बिक्री राशि है कि वहाँ .. या, दूसरे शब्दों में, उत्पाद तालिका में पाए गए कुछ उत्पादों के लिए बिक्री तालिका में कोई रिकॉर्ड नहीं है (उदाहरण के लिए कोई विक्रेता घोड़ा शैम्पू नहीं लेता)। इस कारण से, मैं यह सुनिश्चित करना चाहता हूं कि मेरे द्वारा उपयोग किए जा रहे किसी भी औसत या रकम वास्तव में सटीक हैं। यहां विशिष्ट होने के लिए, यदि एक **।
|-----------|----------------|-----------|---------------|-------------------------------|-------------------------|
| category | count_products | sum_views | average_sales | sum_views_where_sales_=>_1000 | sum_views_sales_<_1000 |
|-----------|----------------|-----------|---------------|-------------------------------|-------------------------|
| adventure | 3 | 27000 | 500 | 0 | 27000 |
| furniture | 2 | 3000 | 833 | 0 | 3000 |
| kitchen | 3 | 18000 | 3000 | 6000 | 12000 |
| music | 2 | 7000 | 5000 | 7000 | 0 |
|-----------|----------------|-----------|---------------|-------------------------------|-------------------------|
क्वेरी की वर्तमान स्थिति
पहले उत्पादों और विचारों पर एक सटीक गणना प्राप्त करने के लिए:
SELECT cat.name AS category,
count(distinct p.name) AS product,
sum(a.views) AS views
FROM
category AS cat,
product AS p,
activity AS a
WHERE
cat.id=p.category_id
AND
p.id=a.product_id
GROUP BY
category;
sidenote: मैं नहीं करने के लिए प्यार होता है में विशिष्ट उपयोग करने के लिए उपरोक्त क्वेरी। यहां कोई भी विचार बहुत अच्छा होगा।
सटीक परिणाम श्रेणी के द्वारा देखा गया प्रदर्शित:
|-----------|---------|-------|
| category | product | views |
|-----------|---------|-------|
| Adventure | 3 | 27000 |
| Furniture | 2 | 3000 |
| Kitchen | 3 | 18000 |
| Music | 2 | 7000 |
|-----------|---------|-------|
सब कुछ अच्छा लग रहा है जब तक मैं अन्य तालिकाओं के लिए शामिल होने शुरू:
SELECT cat.name AS category,
count(distinct p.name) AS product,
sum(a.views) AS views,
round(avg(s.amount)) AS sales_amount
FROM
category AS cat,
product AS p,
activity AS a,
sales AS s
WHERE
cat.id=p.category_id
AND
p.id=a.product_id
AND
p.id=s.product_id
AND
s.vendor_id=1
GROUP BY
category;
समस्या आउटपुट
|-----------|---------|-------|------------------|
| category | product | views | avg_sales_amount |
|-----------|---------|-------|------------------|
| Adventure | 2 | 17000 | 550 |
| Furniture | 2 | 3000 | 950 |
| Kitchen | 2 | 12000 | 4000 |
| Music | 1 | 3000 | 2000 |
|-----------|---------|-------|------------------|
जैसा कि आप देख सकते हैं कि मैं वांछित आउटपुट से आगे बढ़ रहा हूं जब मैं औसत बिक्री राशि प्राप्त करने के लिए विक्रेता_आईडी द्वारा पूछताछ शुरू करता हूं। विशिष्ट होने के लिए, उत्पाद कॉलम का परिणाम अब सही मात्रा में उत्पादों में नहीं होता है क्योंकि सभी विक्रेताओं में s.vendor_id = 1 फ़िल्टर को कठिन बनाने वाले सभी समान उत्पाद नहीं होते हैं। मुझे में इन रिपोर्टों को विक्रेता द्वारा फ़िल्टर करने के लिए उपयोग करना होगा, जबकि अभी भी दृश्य फ़ील्ड पर सटीक रकम प्राप्त हो रही है।
मैंने बाएं जॉइन का उपयोग करके उपर्युक्त प्रश्नों का प्रयास किया है लेकिन अभी भी असुरक्षित परिणामों के साथ समाप्त होता है और यह सुनिश्चित नहीं करता कि क्या होने की आवश्यकता है, संभवतः किसी प्रकार की उप-क्वेरी?
युक्ति: आधुनिक, स्पष्ट 'JOIN' वाक्य रचना में स्विच करें। लिखना आसान है (त्रुटियों के बिना), पढ़ने के लिए आसान (और बनाए रखना), और यदि आवश्यक हो तो बाहरी जुड़ाव में परिवर्तित करना आसान है। – jarlh
क्या 'श्रेणी' में कोई 'उत्पाद' नहीं हो सकता है? – toonice
'उत्पाद'' का क्षेत्र क्यों नहीं है? – toonice