मेरे पास ऐसी कई टेबल हैं जो इस तरह दिखती हैं: (id, user_id, object_id)। मुझे अक्सर इस सवाल में दिलचस्पी है कि "कितने उपयोगकर्ताओं के पास एक वस्तु है? कितने में दो हैं? आदि" और वितरण देखना चाहते हैं।सबक्वायरी का उपयोग किए बिना जॉइन टेबल से गणना के हिस्टोग्राम कैसे प्राप्त कर सकते हैं?
यह करने के लिए स्पष्ट जवाब लगता है:
select x.ucount, count(*)
from (select count(*) as ucount from objects_users group by user_id) as x
group by x.ucount
order by x.ucount;
इस तरह परिणाम का उत्पादन: एक सबक्वेरी का उपयोग
ucount | count
-------|-------
1 | 15
2 | 17
3 | 23
4 | 104
5 | 76
7 | 12
यहाँ मेरे लिए असजीला लगता है और मैं यह पता लगाने की निर्माण करने के लिए कैसे करना चाहते हैं बिना एक ही परिणाम। इसके अलावा, यदि आप जो सवाल पूछने की कोशिश कर रहे हैं वह थोड़ा अधिक जटिल है, तो यह सबकुछ से अधिक जानकारी पास करने में गन्दा हो जाता है। उदाहरण के लिए, अगर आप चाहते हैं डेटा आगे उपयोगकर्ता के निर्माण तिथि के आधार पर वर्गीकृत:
select
x.ucount,
(select cdate from users where id = x.user_id) as cdate,
count(*)
from (
select user_id, count(*) as ucount
from objects_users group by user_id
) as x
group by cdate, x.ucount,
order by cdate, x.ucount;
वहाँ किसी तरह सबक्वेरी के विस्फोट से बचने के लिए है? मुझे लगता है कि अंत में मेरा आपत्ति सौंदर्यशास्त्र है, लेकिन यह प्रश्नों को पढ़ने और कठिन लिखने में कठोर बनाता है।
क्या RDBMS और संस्करण का उपयोग कर रहे हैं? – Lamak
मैं postgresql9 का उपयोग कर रहा हूं लेकिन मैंने किसी भी पोस्टग्रेस-आईएमएस से बचने की कोशिश की। मुझे बताएं कि क्या मैंने कुछ पर्ची छोड़ी है :-) –