Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं उन पदों की संख्या की गणना कैसे कर सकता हूं जिनमें या तो शून्य या सकारात्मक वोट स्कोर हैं?

जिन पोस्टों के कुल वोट शून्य से कम हैं, उन्हें बाहर करने का सबसे आसान तरीका यह है:

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) द्वारा गिनती में गोता लगाना (जिसे मैंने केवल बीटीडब्ल्यू के बारे में सोचा था) प्रतिशत प्राप्त करने का सबसे संक्षिप्त तरीका है, क्योंकि यह न केवल अभिव्यक्ति को सरल बनाता है, बल्कि फ़्लोट के उत्तर को संगीतबद्ध करता है ताकि आप स्वचालित रूप से पूर्णांक अंकगणितीय दौर से बच सकें

<उप>अस्वीकरण:कोड संकलित या काम नहीं कर सकता है क्योंकि यह मेरे फोन पर थंब इन किया गया था (लेकिन एक उचित मौका है कि यह काम करेगा)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्थानीय डेटाबेस कैश के लिए सर्वोत्तम अभ्यास?

  2. केकेपीएचपी MySQL पूर्णांक को स्ट्रिंग्स में परिवर्तित कर रहा है... रैंड () फ़ंक्शन को गड़बड़ कर रहा है

  3. ज़ेंड डीबी / माइस्क्ल - चयन के साथ डालें

  4. MySQL के साथ मिनटों में सम dateiff

  5. पायथन:MySQL से जुड़ने और प्रश्नों को निष्पादित करने का सबसे अच्छा अभ्यास और सबसे सुरक्षित तरीका