আমার অধ্যাপক আমাকে শিখিয়েছিলেন যে `COUNT` সদৃশগুলি গণনা করে না


40

বিশ্ববিদ্যালয়ে, আমার অধ্যাপক এই বছর আমাকে শিখিয়েছিলেন যে এই এসকিউএল বিবৃতি:

SELECT COUNT(length) FROM product

2নিম্নলিখিত ডেটাসেটের সাথে ফিরে আসবে :

|   product         |
|id | length | code |
|-------------------|
| 1 |    11  | X00  |
| 2 |    11  | C02  |
| 3 |    40  | A31  |

তিনি এটি বলে যে এটি COUNTসদৃশ গণনা করে না খালি।

আমি আমার অধ্যাপককে বলেছি যে আমি ভেবেছিলাম সে একটি ত্রুটি করেছে। তিনি আমাকে উত্তর দিয়েছিলেন যে কিছু ডিবিএমএস সদৃশগুলি গণনা করতে পারে বা নাও পারে।

অনেকগুলি ডিবিএমএস চেষ্টা করার পরেও আমি এমন কোনও আচরণ খুঁজে পাই নি যার সাথে এই আচরণ রয়েছে।

এই ডিবিএমএস কি বিদ্যমান?

কোনও অধ্যাপকের এই আচরণ শেখানোর কোনও কারণ আছে কি? এবং উল্লেখ না করেই অন্যান্য ডিবিএমএসের সাথে অন্যরকম আচরণ করা যেতে পারে?


এফওয়াইআই, কোর্স সমর্থনটি এখানে পাওয়া যায় (ফরাসি ভাষায়) । সম্পর্কিত স্লাইডটি 10 ​​পৃষ্ঠায় নীচের বাম কোণে রয়েছে।


1
যেহেতু স্লাইডগুলি এএনএসআই এসকিউএল সম্পর্কে আপনার অধ্যাপক ভুল, এমনকি 1992 এর স্ট্যান্ডার্ডেও ভুল ( ডিগ্রী পৃষ্ঠাটি দেখুন 125. এখানে দেখুন । আপনি লাইব্রেরিটি একটি হালনাগাদ সংস্করণটি
বেঁধে

উত্তর:


38

COUNT আমি অবগত সমস্ত ডিবিএমএসে নকল গণনা করে, কিন্তু।

কোনও অধ্যাপকের এই আচরণ শেখানোর কোনও কারণ আছে কি?

হ্যাঁ, এর একটি কারণ আছে। মূল রিলেশনাল থিওরিতে (যেটি সমস্ত আধুনিক রিলেশনাল ডিবিএমএসকে অন্তর্নিহিত করে) সম্পর্কটি এই শব্দের গাণিতিক অর্থে একটি সেট । এর অর্থ হ'ল কোনও সম্পর্কের মধ্যে কেবলমাত্র আপনার "টেবিলগুলি" নয় সমস্ত ট্রানজিশনাল সম্পর্ক সহ ডুপ্লিকেট থাকতে পারে।

এই নীতি অনুসরণ করে আপনি বলতে পারেন যে SELECT length FROM productইতিমধ্যে কেবলমাত্র দুটি সারি রয়েছে, সুতরাং COUNTরিটার্নের সাথে সংশ্লিষ্ট 2, না 3


উদাহরণস্বরূপ, Rel DBMS- এ, প্রশ্নে প্রদত্ত সম্পর্ক এবং টিউটোরিয়াল ডি সিনট্যাক্স ব্যবহার করে:

SUMMARIZE product {length} BY {}: {c := COUNT()}

দেয়:

রিল ফলাফল


1
যেহেতু এই বছরের শেষের দিকে এই অধ্যাপকের সাথে আমাদের রিলেশনাল থিয়োরি কোর্স ছিল, তাই আমি মনে করি এটি সঠিক উত্তর। যাইহোক, আমি আমার অধ্যাপককে আরও তথ্যের জন্য জিজ্ঞাসা করব।
জুলুস লামুর

2
শিক্ষক সম্ভবত কেবল এসকিউএল ডিবিএমএস নয়, সাধারণভাবে ডিবিএমএস সম্পর্কে কথা বলছিলেন। সম্পাদনাটি যেমন দেখায়, সেখানে সম্পর্কিত মডেল (যেমন রেল) এর বাস্তবায়ন রয়েছে, যেখানে COUNTএসকিউএল বাস্তবায়নগুলির চেয়ে আলাদা আচরণ করে than
ypercubeᵀᴹ

47

হয় আপনার প্রফেসর ভুল করেছেন বা তিনি যা বলেছেন তা আপনি ভুল বুঝেছেন। বিভিন্ন বিক্রেতারা বাস্তবায়িত হিসাবে রিলেশনাল ডিবিএমএসের প্রসঙ্গে, সামগ্রিক ফাংশন ফলাফল সেট (বা একটি গ্রুপ) COUNT(<expression>)এর নন-নুল মানগুলির সংখ্যা প্রদান করে <expression>

এর একটি বিশেষ কেস রয়েছে COUNT(*), যা ফলাফল সেট বা গোষ্ঠীতে সারিগুলির সংখ্যা প্রদান করে, কোনও কিছুর মানের সংখ্যাকে নয়। এটি সমান COUNT(<constant expression>), যেমন COUNT(1)

অনেক ডেটাবেস সমর্থন করে COUNT(DISTINCT <expression>), যা এর অনন্য মানের সংখ্যা প্রদান করবে<expression>


13

যদি আপনার অধ্যাপক এসকিউএল সম্পর্কে কথা বলছেন তবে বিবৃতিটি ভুল। এক্সগুলি সদৃশ সহ COUNT(x)যেখানে সারিগুলির সংখ্যা প্রদান করবে IS NOT NULLCOUNT(*) or COUNT([constant])এটি একটি বিশেষ কেস যা সারিগুলি গণনা করবে এমনকি এমনকী যেখানে প্রতিটি কলাম রয়েছে NULL। যাইহোক, সদৃশগুলি সর্বদা গণনা করা হয়, যদি না আপনি নির্দিষ্ট না করেন COUNT(distinct x)। উদাহরণ:

with t(x,y) as ( values (null,null),(null,1),(1,null),(1,1) )

select count(*) from t
4

select count(1) from t
4

select count(distinct 1) from t
1

select count(x) from t
2

select count(distinct x) from t
1

COUNT(distinct *) অবৈধ আফাইক AI

পার্শ্ব দ্রষ্টব্য হিসাবে, NULL কিছু অনাদায়ী আচরণের প্রবর্তন করে। উদাহরণ হিসাবে:

SELECT SUM(x) + SUM(y),  SUM(x + y) FROM T
4, 2

অর্থাৎ,

SUM(x)+SUM(y) <> SUM(x+y)

তিনি / তিনি যদি বর্ণনামূলক কোনও সম্পর্কিত সিস্টেমের বিষয়ে কথা বলছেন, উদাহরণস্বরূপ, ডেটাবেসস, ​​প্রকারগুলি, এবং সম্পর্কিত সম্পর্কিত মডেল: সিজে ডেট এবং হিউ দারভেনের তৃতীয় ইশতেহার - এটি একটি সঠিক বক্তব্য হবে।

আমাদের সম্পর্ক আছে বলে দিন:

STUDENTS = Relation(["StudentId", "Name"]
                    , [{"StudentId":'S1', "Name":'Anne'},
                       {"StudentId":'S2', "Name":'Anne'},
                       {"StudentId":'S3', "Name":'Cindy'},
                     ])
SELECT COUNT(NAME) FROM STUDENTS

অনুরূপ:

COUNT(STUDENTS.project(['Name']))

অর্থাত

COUNT( Relation(["Name"]
               , [{"Name":'Anne'},
                  {"Name":'Cindy'},
                ]) )

যা 2 ফিরে আসবে ।


3

এমএস এসকিউএল সার্ভারে এটি কীভাবে কাজ করে

COUNT (*) একটি গ্রুপে আইটেমের সংখ্যা প্রদান করে। এর মধ্যে নুল মান এবং সদৃশ রয়েছে।

COUNT (সমস্ত এক্সপ্রেশন) একটি গোষ্ঠীর প্রতিটি সারির জন্য প্রকাশের মূল্যায়ন করে এবং নিরবর্ণের মানগুলি প্রদান করে।

COUNT (DISTINCT এক্সপ্রেশন) একটি গোষ্ঠীর প্রতিটি সারির জন্য এক্সপ্রেশনকে মূল্যায়ন করে এবং অনন্য, ননল মানগুলির সংখ্যা প্রদান করে।


1

যদি টেবিলটি দেখতে এমন হত,

|   product         |
|id | length | code |
|-------------------|
| 1 |    11  | X00  |
| 2 |    11  | C02  |
| 3 |  null  | A31  |

ন্যারি গণনা করা হয়নি বলে কমপক্ষে ওরাকল ডিবিতে আপনি কোয়েরিটি 2 ফেরত পেতে আশা করতে পারেন। সদৃশগুলি অবশ্য ঠিক জরিমানা করা হয়।


-7

হতে পারে তার অর্থ অনন্যের সাথে মিশ্রিত, তবে গণনাটি COUNT টি অভিজাত করে। কিছু শিক্ষক আছেন যারা তাদের স্টাফ জানেন না, কোনও উদ্বেগ নেই কেবল আপনার সহপাঠী / বন্ধুবান্ধবকে জানান যাতে তারা উচ্চ ডিবি এবং সত্যিকারের জীবনে চলে যায় তারা ভুলে যাবে না, তবুও আপনার শিক্ষককে একটি বেনাম বার্তা পাঠান যে তারা জিজ্ঞাসা করলেন যে তারা তা করেন নি স্কয়ারের কিছু ফাংশন বুঝুন এবং একটি বিক্ষোভ চান, আপনার শিক্ষককে ক্লাসের জন্য ডুপ্লিকেটগুলি অন্তর্ভুক্ত করার জন্য কী কী সন্নিবেশ করানো উচিত তা নির্দেশ করার জন্য একটি উপায় নিয়ে আসুন (ডেটা বড় হবে না) এবং যখন তিনি ফাংশন গণনাটি ব্যবহার করেন, আপনি তাকে পেয়েছিলেন। কিছু লোক এতে নেবে, এছাড়াও যখন সে অন্য ডেটাবেসগুলি বলবে, তখন আপনার বন্ধুটি তাকে কোনটি জিজ্ঞাসা করুন, তারপরে তাকে দ্বিগুণ করুন এবং বলুন যে আপনি এই সমস্ত ডেটাবেস চেষ্টা করেছেন এবং সে যেমন বলেছিল তেমনভাবে কাজ করে না এবং সেই গণনাটি নকলগুলি তুলে নেয়।


2
আমি নিশ্চিত নই যে আমি ইচ্ছাকৃতভাবে শিক্ষকের বিরোধিতা করতে বেরিয়েছি। কিছুগুলির সাথে, এটি সম্পূর্ণরূপে কেবল তাদের সাথে ব্যক্তিগতভাবে দেখা করা এবং এটি সম্পর্কে জিজ্ঞাসা করার পক্ষে যথেষ্ট পর্যাপ্ত হতে পারে, আপনার সাথে পাল্টা-উদাহরণ প্রস্তুত (কেবল এটি দেখানোর জন্য যে আপনার কাছে জিজ্ঞাসার কারণ রয়েছে)। তবুও, পদ্ধতির প্রাথমিক বিষয়গুলি বৈধ; ব্যবহারের নির্দিষ্ট দিকটি ওপেন পর্যন্ত।
আরডিফোজ 4'17
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.