एक क्वेरी में एकाधिक गणना कैसे करें?


12

मैं जैसे प्रश्नों के साथ रिकॉर्ड गिनता हूं

SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%word%'

प्रत्येक गणना के लिए, mysql को तालिका से बाहर चलना होगा, और लंबी तालिका और कई प्रश्न होने पर यह एक बड़ी समस्या है।

मुझे आश्चर्य है कि क्या एक क्वेरी में सभी गणना करने का एक तरीका है। इस मामले में, जब mysql प्रत्येक पंक्ति पर चलता है, तो यह सभी गणनाओं को संसाधित करेगा, और पूरी तालिका को बार-बार स्कैन करने की आवश्यकता नहीं है।


उन उत्तरों को जोड़ने के लिए जो सही हैं, सुझाए गए प्रश्न केवल एक बार तालिका को स्कैन करते हैं।

जवाबों:


21

उनमें से प्रत्येक के लिए एक गिनती प्राप्त करने के लिए आप कोशिश कर सकते हैं

SELECT
    COUNT(CASE WHEN `col1` LIKE '%something%' THEN 1 END) AS count1,
    COUNT(CASE WHEN `col1` LIKE '%another%' THEN 1 END) AS count2,
    COUNT(CASE WHEN `col1` LIKE '%word%' THEN 1 END) AS count3
FROM `table1`; 

16

हारून के विलेय के समान, छोटा सिंटैक्स:

SELECT
    SUM(col1 LIKE '%something%') AS count1,
    SUM(col1 LIKE '%another%') AS count2,
    SUM(col1 LIKE '%word%') AS count3
FROM `table1`

LIKE अभिव्यक्ति एक बूलियन परिणाम के लिए बनाता है। TRUEहै 1 , FALSEहै 0 हां, तो CASEअनावश्यक यहाँ है।


बहुत साफ-सुथरा और संक्षिप्त - लेकिन तब क्या होता है जब गणना एक बिंदु में फिट नहीं होती है - क्या आपको कोई त्रुटि मिलती है या किसी प्रकार का रूपांतरण होता है?
जैक का कहना है कि topanswers.xyz

TINYINTइस कहानी में कोई भी नहीं है। SUMजो भी प्रकार की संख्या है, वह (यहां तक ​​कि फ्लोट) भी लेता है और एक संख्यात्मक परिणाम उत्पन्न करता है। आप हजारों में मान प्राप्त करने के लिए टाइप कर सकते SUMहैं TINYINT- यह कोई समस्या नहीं है।
श्लोमी नोआच

आप निश्चित रूप से जानते हैं कि बूल टिनींट बीडब्ल्यूटी का पर्याय है?
जैक का कहना है कि शीर्षासनवासियों की कोशिश करो ।xyz

हाँ, मेरे दोस्त, मुझे पता है कि। " TINYINTइस कहानी में कोई दम नहीं है" शायद शुरुआत करने के लिए एक अच्छा वाक्य नहीं था।
श्लोमी नोआच

1
MS SQL सर्वर विशिष्ट उत्तर की खोज में यहाँ पर ठोकर खाने वाले किसी भी व्यक्ति के लिए नोट, SUMयहाँ वर्णित फ़ंक्शन MS SQL सर्वर में उसी तरह काम नहीं करता है। Transct-SQL में SUMकेवल संख्यात्मक कॉलम के साथ उपयोग किया जा सकता है।
user1451111

-1

अगर मुझे आपकी जरूरत सही लगे तो शायद यही काम करेगा:

SELECT SUM(CASE 
  WHEN col1 LIKE '%something' THEN 1 
  WHEN col1 LIKE '%another%' THEN 1 
END) AS result
FROM table1;

1
हारून एवेरर को देखते हुए कि शायद आप जो हैं - एकाधिक गिनती प्राप्त करने के लिए - सभी गणनाओं का योग नहीं।
जॉनपी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.