ฉันสับสนตัวเองมาก
มีใครบางคนกรุณาอธิบายภายใต้สถานการณ์ที่ฉันต้องการใช้ GROUP BY COALESCE
ฉันเดาว่าฉันจะใช้มันถ้าฉันต้องการจัดกลุ่มชุดข้อมูลตามคอลัมน์ B แบบมีเงื่อนไข (ถ้า B ไม่ใช่โมฆะ) และคอลัมน์ A เป็นอย่างอื่น เสียงนั้นใช่ไหม
ฉันสับสนตัวเองมาก
มีใครบางคนกรุณาอธิบายภายใต้สถานการณ์ที่ฉันต้องการใช้ GROUP BY COALESCE
ฉันเดาว่าฉันจะใช้มันถ้าฉันต้องการจัดกลุ่มชุดข้อมูลตามคอลัมน์ B แบบมีเงื่อนไข (ถ้า B ไม่ใช่โมฆะ) และคอลัมน์ A เป็นอย่างอื่น เสียงนั้นใช่ไหม
คำตอบ:
ด้วยGROUP BY b,atuples (null, 1), (1,1), (2,1)และ(17,1)จะสิ้นสุดในสี่กลุ่มที่แตกต่างกัน
ด้วยGROUP BY coalesce(b,a)tuples (null,1), (1,1), (2,1)และ(17,1)จะจบลงในกลุ่มเดียวกัน
หากคุณต้องการจัดกลุ่ม "เงื่อนไข" แล้วใช่รุ่นที่มีcoalesceอาจเป็นสิ่งที่คุณต้องการ
TUPLE { a 17 , b 1 }เป็นเช่นเดียวTUPLE { b 1 , a 17 }แต่ใน SQL ตัวสร้างมูลค่าแถวจะไม่เหมือนกันเป็นตัวสร้างมูลค่าแถว(17, 1) (1, 17)นี่คือเหตุผลที่ "คู่" ของคุณไม่ใช่สิ่งอันดับ เนื่องจากคุณไม่ได้กำหนดตัวสร้างประเภทแถวฉันจึงต้องสมมติจากบริบทที่เป็น(a, b)มากกว่า(b, a)แต่การรวมไว้จะไม่ทำให้ tuple ในทางตรงกันข้ามTUPLE { 17 , 1 }ไม่ได้เป็นภาวนา tuple ที่ถูกต้องในการกวดวิชา D, TUPLE { a null , b 1 }ไม่เป็น
                    นี่คือตัวอย่างคำตอบ+1 ที่ยอดเยี่ยมของ a_horse_with_no_name
SQL> WITH Data AS (
  2     SELECT level, DECODE(Level,3,NULL,1) A
  3        , DECODE(level,2,NULL,4,2,1) B
  4     FROM dual connect by level <=5
  5     )
  6  SELECT A, B, count(*) FROM Data GROUP BY B, A;
A B   COUNT(*)
- - ----------
1 1          2
1            1
1 2          1
  1          1
SQL> WITH Data AS (
  2     SELECT level, DECODE(Level,3,NULL,1) A
  3        , DECODE(level,2,NULL,4,2,1) B
  4     FROM dual connect by level <=5
  5     )
  6  SELECT COALESCE(B, A) X, count(*) FROM Data GROUP BY COALESCE(B, A);
X   COUNT(*)
- ----------
1          4
2          1