सबसे अच्छा तरीका में SQL करने के लिए self-join तीन क्षेत्र मेज के बिना चाबी के मूल्यों को प्राप्त सौंपा कुंजी और विशेष रूप से गिनती

0

सवाल

हम कहते हैं कि हम एक मेज है:

कुंजी मूल्य _count
एक बी 3
सी d 2

हम चाहते हैं कि विस्तार करने के लिए इस तरह है कि प्रत्येक कुंजी पर मैप हो जाता है में से प्रत्येक के लिए अलग मूल्य तालिका में और एक हो जाता है _count 0 अगर महत्वपूर्ण मूल्य जोड़ी नहीं था पहले से ही एक गिनती. के लिए उदाहरण के लिए, तालिका के ऊपर, मैं होगा की तरह देखने के लिए:

कुंजी मूल्य _count
एक बी 3
एक d 0
सी d 2
सी बी 0

मैं एक काम कर समाधान:

WITH key_value_pairs AS (
  SELECT 
    a.key, 
    b.value
  FROM 
    (SELECT DISTINCT key FROM table) a, (SELECT DISTINCT value FROM table) b
  )

SELECT 
  kvp.key, 
  kvp.value, 
  COALESCE(base._count, 0) _count 
FROM 
  key_value_pairs kvp
LEFT JOIN 
  table base ON base.key = kvp.key AND base.value = kvp.value;

लेकिन मुझे संदेह है वहाँ हो सकता है एक आसान/अधिक पठनीय/अधिक कुशल तरीके से इस लागू करने के लिए-किसी भी सुझाव?

sql
2021-11-23 23:43:46
1

सबसे अच्छा जवाब

1

आप का उपयोग कर सकते हैं cross join के साथ left join के लिए एक छोटा समाधान:

select t1.key, t2.value, coalesce(t3._count, 0) from tbl t1 
cross join tbl t2 left join tbl t3 on t1.key = t3.key and t2.value = t3.value;
2021-11-23 23:57:34

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में