2011-01-24 16 views
16

1. ब्लॉगरएसक्यूएल - एक और टेबल से गणना का उपयोग करना

blogger_id 
1 
2 
3 

2. पोस्ट

post_from_blogger_id 
1 
1 
1 
2 
2 
3 

आप ब्लॉगर №1 पोस्ट देख सकते हैं क्रम कैसे दूसरों की तुलना में अधिक से ब्लॉगर №3 कम। प्रश्न एक ब्लॉग बनाने का तरीका है जो सभी ब्लॉगर्स का चयन करता है और उन्हें अपनी पोस्ट की संख्या से टाइप करता है?

उत्तर

40
SELECT bloggers.*, COUNT(post_id) AS post_count 
    FROM bloggers LEFT JOIN blogger_posts 
    ON bloggers.blogger_id = blogger_posts.blogger_id 
    GROUP BY bloggers.blogger_id 
    ORDER BY post_count 

(नोट: MySQL विशेष सिंटेक्स आप ग्रुप द्वारा देता है कि सभी मानों के योग के बिना, यह वास्तव में इस स्थिति के लिए उद्देश्य से है)।

3

सबक्वायरीज़ का उपयोग करें।

select * from (
    select post_from_blogger_id, count(1) N from Posts 
    group by post_from_blogger_id) t 
order by N desc 
+0

सबक्वेरी आवश्यक नहीं है के लिए शामिल हों प्रयास करें। –

2

इस प्रयास करें:

SELECT B.blogger_id, 
     B.blogger_name, 
     IFNULL(COUNT(P.post_from_blogger_id),0) AS NumPosts 
From Blogger AS B 
LEFT JOIN Posts AS P ON P.post_from_blogger_id = B.blogger_id 
GROUP BY B.blogger_id, B.blogger_name 
ORDER BY COUNT(P.post_from_blogger_id) DESC 

2 टेबल मिलती है, और Posts तालिका में प्रविष्टियों की संख्या गिना जाता है। यदि कोई नहीं है, तो गणना 0 है (IFNULL)।

+0

क्या आपको वास्तव में IFNULL की आवश्यकता है? यदि कोई गैर-NULL post_from_blogger_id मानों का सामना नहीं किया जाता है तो COUNT 0 वापस नहीं आना चाहिए? –

+0

और COUNT को काम करने की अनुमति देने के लिए आप एक समूह BY खो रहे हैं। –

+0

अब जब आपने ग्रुप बाय जोड़ा है, तो आप MySQL का लाभ उठा सकते हैं और समूहीकृत कॉलम की सूची में केवल blogger_id शामिल कर सकते हैं। –

2
SELECT b.* 
FROM Bloggers AS b 
LEFT JOIN (
    SELECT post_from_blogger_id, COUNT(*) AS post_count 
    FROM Posts 
    GROUP BY post_from_blogger_id 
) AS p ON b.blogger_id = p.post_from_blogger_id 
ORDER BY p.post_count DESC 
1

वाम इस सवाल

SELECT DISTINCT(Bloggers.blogger_id), 
(select count(post_from_blogger_id) from Posts 
where Posts.post_from_blogger_id=Bloggers.blogger_id) post_from_blogger_id FROM Bloggers 
LEFT OUTER JOIN Posts ON Bloggers.blogger_id=Posts.post_from_blogger_id 
ORDER BY post_from_blogger_id DESC 
संबंधित मुद्दे