ทางที่ดีที่สุดที่อยู่ในภาษา sql ต้องตัวเองเข้าร่วมกับสามทุ่โต๊ะดังนั้นกุญแจโดยไม่มีค่าของได้รับมอบหมายให้มาทำข่าวยกุญแจและโดยเฉพาะจำนวน

0

คำถาม

บอกพวกเรามีโต๊ะ:

กุญแจ ค่า _count
เป็ บี 3
c d 2

ที่เราต้องการขยายเรื่องนั้นกันและกุญแจถึงแผนไว้ให้กันและหารค่าค่าในโต๊ะแล้วก็ได้ _count ข 0 หากุญแจ-ค่าคู่ไม่ได้แล้วต้องนับดู ตัวอย่างเช่นสำหรับโต๊ะอยู่เหนือฉันอยากดู:

กุญแจ ค่า _count
เป็ บี 3
เป็ d 0
c d 2
c บี 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ý
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่