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

पहलू खोज विशेषता गणना

यहां बताया गया है कि आप यह कैसे कर सकते हैं:

SELECT meta_name, meta_value, COUNT(DISTINCT item_id) count
  FROM meta m JOIN item_meta im
    ON im.field_id = m.id
 GROUP BY meta_name, meta_value

आउटपुट:

|      META_NAME | META_VALUE | COUNT |
|----------------|------------|-------|
|       Car Type |      Coupe |     2 |
|       Car Type |      Sedan |     1 |
|          Color |      Black |     1 |
|          Color |        Red |     1 |
|          Color |      White |     1 |
| Interior Color |      Black |     2 |
| Interior Color |       Grey |     1 |
|           Make |        BMW |     2 |
|           Make |      Honda |     1 |
|          Model |    2Series |     1 |
|          Model |    3Series |     1 |
|          Model |      Civic |     1 |

यह रहा SQLFiddle डेमो

अद्यतन करें:

फ़िल्टर किया गया:

SELECT meta_name, meta_value, COUNT(DISTINCT item_id) count
  FROM meta m JOIN item_meta im
    ON im.field_id = m.id
 WHERE item_id IN
(
  SELECT i.id
  FROM item_meta im JOIN items i
    ON im.item_id = i.id JOIN meta m
    ON im.field_id = m.id
 GROUP BY i.id
HAVING MAX(meta_name = 'Make' AND meta_value = 'BMW') = 1
   AND MAX(meta_name = 'Car Type' AND meta_value = 'Coupe') = 1
)
 GROUP BY meta_name, meta_value;

आउटपुट:

|      META_NAME | META_VALUE | COUNT |
|----------------|------------|-------|
|       Car Type |      Coupe |     2 |
|          Color |      Black |     1 |
|          Color |      White |     1 |
| Interior Color |      Black |     1 |
| Interior Color |       Grey |     1 |
|           Make |        BMW |     2 |
|          Model |    2Series |     1 |
|          Model |    3Series |     1 |

यह रहा SQLFiddle डेमो

अद्यतन2:

यह आसान है। स्वाभाविक रूप से AND . का उपयोग करने के बजाय में HAVING क्लॉज (एक कार एक ही समय में काली और लाल नहीं हो सकती) आपको OR . का उपयोग करना होगा ऐसा ही

HAVING MAX(meta_name = 'Color' AND meta_value = 'Black') = 1
    OR MAX(meta_name = 'Color' AND meta_value = 'Red')   = 1

या यहाँ समान आशय व्यक्त करने का दूसरा तरीका है

HAVING MAX(meta_name = 'Color' AND meta_value = 'Black') +
       MAX(meta_name = 'Color' AND meta_value = 'Red') > 0

यह रहा SQLFiddle डेमो



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - यह क्वेरी इंडेक्स का उपयोग क्यों नहीं करती (समझाने के अनुसार)

  2. दिनांक कॉलम के लिए एएससी/डीईएससी द्वारा MySQL सशर्त आदेश

  3. SQL में पदानुक्रमित टैगिंग

  4. MySQL एकाधिक तालिकाओं से पंक्ति हटाएं

  5. प्रत्येक प्रश्न के लिए संग्रहित प्रक्रियाओं का उपयोग न करने का कोई कारण?