जिन पोस्टों के कुल वोट शून्य से कम हैं, उन्हें बाहर करने का सबसे आसान तरीका यह है:
SELECT count(1)
FROM qanda question
JOIN qanda answer ON question.Id = answer.related
WHERE answer.related IS NOT NULL
AND answer.user_id = 2
AND question.free IS NULL
AND question.id not in (
select post_id
from votes
group by post_id
having sum(value) < 0)
यहाँ मुख्य भाग है having sum(value) < 0
जो शुद्ध नकारात्मक वोट वाले पदों का चयन करते हैं।
टिप्पणियों से...
उन उपयोगकर्ताओं को खोजने के लिए जिनके पास बहुत अधिक "खराब" उत्तर हैं, आपको संभवतः उनके द्वारा किए गए कितने "अच्छे" उत्तर लौटाने चाहिए और यह तय करना चाहिए कि क्या वे कुल मिलाकर "खराब" उपयोगकर्ता हैं। उदाहरण के लिए, एक उपयोगकर्ता जिसके पास 5 उत्तर हैं जो सभी खराब हैं, 1000 उत्तरों वाले उपयोगकर्ता से बहुत अलग है, जिनमें से केवल 5 खराब हैं, भले ही उन दोनों के 5 खराब उत्तर हों।
इसे आजमाएं:
select
sum(score < 0) bad,
count(*) total,
sum(score < 0) / sum(.01) percent_bad
from (
SELECT coalesce(sum(value), 0) score
FROM qanda question
JOIN qanda answer ON question.Id = answer.related
LEFT JOIN votes ON votes.post_id = answer.id
WHERE answer.related IS NOT NULL
AND answer.user_id = 2
AND question.free IS NULL
AND answer.timestamp > subdate(now(), 365)
GROUP BY answer.id
) scores
वहाँ कुछ SQL कुंग फू पर कुछ नोट्स:
- MySQL में, सत्य 1 है और असत्य 0 है, इसलिए एक शर्त को जोड़कर, आप गणना करते हैं कि यह कितनी बार सत्य है। यह अनाड़ी
SUM(CASE ...)
की तुलना में कोड के लिए बहुत आसान है, और पढ़ने में आसान है। अन्य DB के लिए आवश्यक भाव SUM(.01)
द्वारा गिनती में गोता लगाना (जिसे मैंने केवल बीटीडब्ल्यू के बारे में सोचा था) प्रतिशत प्राप्त करने का सबसे संक्षिप्त तरीका है, क्योंकि यह न केवल अभिव्यक्ति को सरल बनाता है, बल्कि फ़्लोट के उत्तर को संगीतबद्ध करता है ताकि आप स्वचालित रूप से पूर्णांक अंकगणितीय दौर से बच सकें
<उप>अस्वीकरण:कोड संकलित या काम नहीं कर सकता है क्योंकि यह मेरे फोन पर थंब इन किया गया था (लेकिन एक उचित मौका है कि यह काम करेगा)