কোনও ডাটাবেস টেবিলের "টেবিল নাম থেকে কাউন্ট (1) নির্বাচন করুন" এর অর্থ কী?


94

যখন আমরা select count(*) from table_nameএটি কার্যকর করি তখন সারিগুলির সংখ্যা প্রদান করে।

কি করে count(1)? 1এখানে কি বোঝায়? এটি কি একই count(*)(যেমন মৃত্যুদণ্ড কার্যকর করার ক্ষেত্রে একই ফলাফল দেয়)?


4
আকর্ষণীয় প্রশ্ন। আমি উত্তরটি বাস্তবায়ন-নির্ভর কিনা সে সম্পর্কেও আগ্রহী হব (উদাঃ যেমন এসকিউএল সার্ভারে কোয়েরির ফলাফলটি ওরাকলে যেমন রয়েছে তেমন কিনা)।
জন স্নাইডার

উত্তর:


109

COUNT ফাংশনের প্যারামিটারটি এমন একটি অভিব্যক্তি যা প্রতিটি সারির জন্য মূল্যায়ন করতে হয়। COUNT ফাংশনটি সারিগুলির সংখ্যা প্রদান করে যার জন্য অভিব্যক্তি একটি নন-মানকে মূল্যায়ণ করে। (* একটি বিশেষ অভিব্যক্তি যা মূল্যায়ন করা হয় না, এটি কেবল সারিগুলির সংখ্যা দেয়))

এক্সপ্রেশনটির জন্য আরও দুটি অতিরিক্ত সংশোধক রয়েছে: সমস্ত এবং DISTINCT। এটি নির্ধারণ করে যে সদৃশগুলি বাতিল করা হয়। যেহেতু সমস্তই ডিফল্ট, তাই আপনার উদাহরণ গণনা (ALL 1) এর সমান, যার অর্থ হ'ল সদৃশগুলি বজায় রাখা আছে।

যেহেতু "1" এক্সপ্রেশনটি প্রতিটি সারির জন্য নন-নালকে মূল্যায়ন করে এবং যেহেতু আপনি সদৃশগুলি অপসারণ করছেন না, তাই COUNT (1) সর্বদা একই সংখ্যাকে COUNT (*) হিসাবে ফেরত দেওয়া উচিত।


টেবিল 1 থেকে DISTINCT coloumn1 নির্বাচন করুন! = টেবিল 1 থেকে গণনা নির্বাচন করুন (DISTINCT coloumn1);
কানাগাভেলু সুগুমার

এছাড়াও গণনা করুন (1) এখানে 1 টি কলম্বন নয়, এটি একটি অভিব্যক্তি। উদাহরণস্বরূপ) টেবিল 1 থেকে 1 নির্বাচন করুন; সারণীতে থাকা সারিগুলির জন্য কোনও সময় 1 বার মুদ্রণ করবে।
কানাগাভেলু সুগুমার

টেবিল 1 থেকে গণনা (DISTINCT / সমস্ত কলাম নাম) নির্বাচন করুন; কলামের (কলামনাম) সমস্ত / স্বতন্ত্র নয় নাল মানগুলির কোনও প্রদান করবে না।
কানগাভেলু সুগুমার

টেবিল 1 থেকে DISTINCT কলাম 1 নির্বাচন করুন; কলামে (কলাম 1) একটি নুল মান অন্তর্ভুক্ত করবে। টেবিল 1 থেকে গণনা (DISTINCT coloumn1) নির্বাচন করুন; এমনকি একটি নুল সারিও অন্তর্ভুক্ত করবে না।
কানগাভেলু সুগুমার

4
@ ড্যাটিপস - বাস্তবে সীমাহীন সংখ্যার মত প্রকাশ রয়েছে যা একই ফলাফল দেয়। COUNT ('হ্যালো, ওয়ার্ল্ড!') এর পাশাপাশি কাজ করা উচিত। (আমি এটি চেষ্টা করি নি।) সুতরাং প্রশ্নটি হল, ইতিমধ্যে একই কাজ করার সীমাহীন সংখ্যক উপায় থাকা অবস্থায় কেন একটি বিশেষ অভিব্যক্তি তৈরি করুন (*)? আমি এসকিউএল এর নির্মাতাদের পক্ষে কথা বলতে পারি না (যাদের প্রায়শ্চিত্ত করার জন্য অনেক পাপ রয়েছে)) তবে এটি সম্ভবত তাই ছিল যাতে লোকেরা নির্বিচারে একটি নন-এক্সপ্রেস চয়ন করতে না পারে। এটি ক্যোয়ারের লেখকের উদ্দেশ্যকে হতাশ করেছিল। "কেন তারা 2 এর পরিবর্তে 1 লিখেছিল? এর কিছু অর্থ অবশ্যই হওয়া উচিত!"
জেফ্রি এল হুইটলেজ

28

এখানে একটি লিঙ্ক যা আপনার প্রশ্নের উত্তর দিতে সহায়তা করবে। সংক্ষেপে:

গণনা (*) হ'ল এটি লেখার সঠিক উপায় এবং গণনা (1) অভ্যন্তরীণভাবে (*) গণনা করা অপ্টিমাইজড - যেহেতু

ক) যে সারিগুলি 1 টি নাল নয় তার তুলনায় কম দক্ষ
খ) সারিগুলি গণনা করুন


18

ওরাকলে গণনা (*) এবং গণনা (1) এর মধ্যে পার্থক্য?

গণনা (*) এর অর্থ এটি সমস্ত রেকর্ড অর্থাৎ প্রতিটি সেল বিটকে গণনা করবে

গণনা (1) এর অর্থ এটি মান 1 সহ একটি সিউডো কলাম যুক্ত করবে এবং সমস্ত রেকর্ডের গণনা প্রদান করবে


9

এটির মধ্যে পার্থক্যের অনুরূপ

SELECT * FROM table_name and SELECT 1 FROM table_name.  

যদি তুমি করো

SELECT 1 FROM table_name

এটি আপনাকে সারণীতে প্রতিটি সারির জন্য নম্বর দেবে। সুতরাং হ্যাঁ count(*)এবং count(1)ইচ্ছার হিসাবে count(8)বা একই ফলাফল প্রদান করবেcount(column_name)


4
গণনা (কলাম_নাম) একরকম নয় - এটি column কলামটিতে নাল দিয়ে সারিগুলি গণনা করে না। বিস্তারিত জানার জন্য এখানে দেখুন: stackoverflow.com/questions/169784
Blorgbeard বাইরে

হুম, আসলে এটি এসকিউএল সার্ভারের জন্য। ওরাকল ভিন্নভাবে কাজ করতে পারে বলে আমি মনে করি।
ব্লারগবার্ড

স্ট্যান্ডার্ড এসকিউএল অনুসারে গণনাটি কখনই নুল মানগুলি ব্যবহার করা উচিত নয়, অর্পাল এবং এসকিউএল সার্ভারের এই ক্ষেত্রে একই আচরণ হওয়া উচিত।
Thorsten

"SELECT * FROM টেবিল_নাম এবং SELECT 1 FROM টেবিল_নামের মধ্যে পার্থক্যের সমান" " -- আসলে তা না. নির্বাচন * এবং নির্বাচন 1 আলাদা are নির্বাচন (*) এবং নির্বাচন (1) একই ফলাফল দেয়।
ডেভিড অলড্রিজ

7

এখানে কোন পার্থক্য নেই.

COUNT(1)মূলত প্রতিটি সারির জন্য একটি ধ্রুবক মান 1 কলাম গণনা করা হয়। এখানকার অন্যান্য ব্যবহারকারীরা যেমন বলেছেন, এটি COUNT(0)বা তেমনই সমান COUNT(42)। যে কোনও অমূল্যই NULLযথেষ্ট।

http://asktom.oracle.com/pls/asktom/f?p=100:11 Used603224624843292::::: পি 11_কিউএসটিএন_আইডিক্ট 156151916789

ওরাকল অপটিমাইজার স্পষ্টতই এতে বাগগুলি ব্যবহার করেছিল, যার ফলে আপনি কোন কলামটি বেছে নিয়েছেন এবং এটি কোনও সূচীতে ছিল কিনা তা গণনাটিকে প্রভাবিত করেছিল, সুতরাং COUNT (1) সম্মেলনটি কার্যকর হয়েছিল came


5
SELECT COUNT(1) from <table name>

ঠিক একই জিনিস করা উচিত

SELECT COUNT(*)  from <table name>

এটি SELECT COUNT(*)কিছু ডাটাবেসের চেয়ে আরও ভাল পারফর্ম করার জন্য কিছু কারণ থাকতে পারে বা এখনও থাকতে পারে , তবে আমি বিবেচনা করব যে ডিবিতে কোনও বাগ।

SELECT COUNT(col_name) from <table name>

তবে এর আলাদা অর্থ রয়েছে, কারণ এটি প্রদত্ত কলামটির জন্য একটি নন-নাল মান সহ কেবল সারিগুলিকে গণনা করে।


3

ওরাকলে আমি বিশ্বাস করি এগুলির ঠিক একই অর্থ রয়েছে


1 টি কি একটি কলাম উল্লেখ করে?
dacracot

4
না, 1 ধ্রুবক সংখ্যা 1 বোঝায়। আপনি যখন 1 বলে অর্ডার বলছেন, এটি কলামটি একটিকে বোঝায়।
থিলো

কিছুক্ষণ আগেই আমি ভাবছিলাম, তবে আপনি যে কোনও সংখ্যা কলামের গণনার চেয়ে বেশি উল্লেখ করতে পারেন, ফলাফল এখনও একই। সুতরাং এটি অবশ্যই কলাম নম্বর নয়।
Nrj

@ ড্যাক্রাকোট: এটি হতে পারে তবে আমি এটি বিশ্বাস করি না। ওরাকল যা বুঝতে পেরেছি তা থেকে কেবল পটভূমিতে গণনা (1) গণনা (*) পুনরায় লিখেছেন
জারোড এলিয়ট

2

আপনি এটির মতো পরীক্ষা করতে পারেন:

create table test1(
 id number,
 name varchar2(20)
);

insert into test1 values (1,'abc');
insert into test1 values (1,'abc');

select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;

0

আপনি কাকে জিজ্ঞাসা করছেন তার উপর নির্ভর করে কিছু লোক রিপোর্ট করে যে মৃত্যুদন্ড কার্যকর করা তার select count(1) from random_table;চেয়ে দ্রুত চলে select count(*) from random_table। অন্যরা দাবি করেন যে তারা ঠিক একই রকম।

এই লিঙ্কটি দাবি করেছে যে 2 এর মধ্যে গতির পার্থক্য একটি সম্পূর্ণ টেবল স্ক্যান বনাম দ্রুতগতি সম্পূর্ণ স্ক্যানের কারণে।


আপনি লিঙ্কটির ভুল ব্যাখ্যা দিচ্ছেন। এলএস এই বিন্দুটি তৈরি করছে যে COUNT (COLUMN) COUNT (*) এর তুলনায় একই এবং দ্রুত হতে পারে, তবে কেবল যখন কোনও নাল কলামকে সূচিযুক্ত করা হয় না তবে COLUMN সূচকযুক্ত হয় এবং আসলে কোনও নাল মান থাকে না। একটি কৌতুক প্রশ্ন আরও।
ডেভিড অলড্রিজ

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