B, B এবং A COALESCE (B, A) এর মাধ্যমে গ্রুপের মধ্যে পার্থক্য


20

আমি নিজেকে খুব বিভ্রান্ত করছি।

কেউ কি দয়া করে বর্ণনা করতে পারেন যে আমি কোন পরিস্থিতিতে কলের মাধ্যমে গ্রুপ ব্যবহার করতে চাই?

আমার ধারণা হ'ল আমি শর্তাধীন কলাম বি দ্বারা (যদি বি নাল না হয়) এবং অন্যথায় কলাম দ্বারা ডেটা সেট করে ডেটা সেট করতে চাইতাম তবে আমি এটি ব্যবহার করব। এটা ঠিক আছে?

উত্তর:


37

সঙ্গে 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সম্ভবত আপনি চান is


ক্রিস ডেট : "একটি 'টাইপ' যাতে নাল থাকে সে টাইপ নয় (কারণ টাইপগুলিতে ভ্যালু থাকে)। একটি 'টিপল' যার মধ্যে নাল থাকে তা টুপল নয় (কারণ টুপলে মান থাকে)।"
onedaywhen

@ মাওনাদেহেন: আচ্ছা, তত্ত্ব ও অনুশীলনের মধ্যে এটি তফাত;)
এ_ ঘোড়া_বিহীন_নো_নাম

আমার বক্তব্য: এটি একটি এসকিউএল টেবিল এক্সপ্রেশন একটি সম্পর্কের মধ্যে tuple এবং একটি সারি মধ্যে পার্থক্য। একটি টিউপল তাত্ত্বিক এবং অনুশীলনে উভয়ই এসকিউএল-তে প্রযোজ্য নয়।
onedaywhen

@ মাওনদয়াহেন: সুতরাং আপনার মানে আমার কথাটি বদলা উচিত? এসকিউএল-তে দুটি (কলাম) মানের সংমিশ্রণটি প্রকাশ করার জন্য আপনি কোন শব্দটির সুপারিশ করবেন? তাদের অগত্যা একই টেবিল থেকে আসা বা সম্পূর্ণ সারি হওয়ার দরকার নেই।
a_horse_with_no_name

1
উদাহরণস্বরূপ, টিউটোরিয়াল ডি-তে, TUPLE { a 17 , b 1 }একইরকম TUPLE { b 1 , a 17 }, তবে এসকিউএল-এ সারি মান নির্মাতা, সারি মান নির্মাতার মতো (17, 1)নয় (1, 17)। এজন্য আপনার "জোড়া" টিপলস নয়। কারণ আপনি একটি সারিতে টাইপ কন্সট্রাকটর আমি আবশ্যক বাদ দিয়েছি অনুমান প্রসঙ্গ থেকে তারা (a, b)বদলে (b, a)কিন্তু তার অন্তর্ভুক্তি এখনও এটি একটি tuple করা হবে না। বিপরীতে, TUPLE { 17 , 1 }টিউটোরিয়াল ডি তে একটি বৈধ tuple অনুরোধ নয় বা হয় না TUPLE { a null , b 1 }
onedaywhen

16

এখানে__ ঘোড়া_ও_না_নামের দুর্দান্ত +1 উত্তরের একটি প্রদর্শন রয়েছে ration

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

2
দুর্দান্ত প্রদর্শন!
a_horse_with_no_name

'স্তর' সম্পর্কে ভাবার জন্য আমাকে প্রতিবিম্বিত করতে হবে, এটি খুব দরকারী!
লুক এম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.