এসকিউএল কোয়েরিতে, আমরা সামগ্রিক ফাংশন প্রয়োগ করতে ক্লজ দ্বারা গ্রুপ ব্যবহার করি।
- কিন্তু গ্রুপ দ্বারা ক্লমের নামের পরিবর্তে সংখ্যার মান ব্যবহার করার পিছনে উদ্দেশ্য কী? উদাহরণস্বরূপ: 1 দ্বারা গ্রুপ।
এসকিউএল কোয়েরিতে, আমরা সামগ্রিক ফাংশন প্রয়োগ করতে ক্লজ দ্বারা গ্রুপ ব্যবহার করি।
উত্তর:
আইএমএইচও করা আসলে এটি খুব খারাপ কাজ এবং এটি অন্যান্য বেশিরভাগ ডাটাবেস প্ল্যাটফর্মে সমর্থিত নয়।
লোকেরা এটি করার কারণগুলি:
এটি খারাপ হওয়ার কারণগুলি:
এটি স্ব-ডকুমেন্টিং নয় - কাউকে গোষ্ঠী নির্ধারণের জন্য নির্বাচনী তালিকাটি বিশ্লেষণ করতে যেতে হবে। এটি এসকিউএল সার্ভারে আসলে আরও কিছুটা পরিষ্কার হবে, যা মাইএসকিউএলের মতো গোষ্ঠীভুক্ত গোষ্ঠীগুলিকে সমর্থন করে না যারা জানেন-
এটি ভঙ্গুর - কেউ আসে এবং নির্বাচন তালিকা পরিবর্তন করে কারণ ব্যবসায় ব্যবহারকারীরা একটি ভিন্ন প্রতিবেদন আউটপুট চেয়েছিলেন, এবং এখন আপনার আউটপুট একটি গোলমাল। আপনি যদি গ্রুপের মাধ্যমে কলামের নামগুলি ব্যবহার করে থাকেন তবে SELECT তালিকার ক্রমটি অপ্রাসঙ্গিক হবে।
এসকিউএল সার্ভার অর্ডারকে [অর্ডিনাল] সমর্থন করে; এখানে এর ব্যবহারের বিরুদ্ধে কিছু সমান্তরাল যুক্তি রয়েছে:
মাইএসকিউএল আপনাকে GROUP BYএলিয়াস ( কলামের নাম সহ সমস্যা ) করার অনুমতি দেয়। এটি GROUP BYসংখ্যার সাথে করা আরও ভাল হবে ।
column numberএসকিউএল ডায়াগ্রামে আছে । একটি লাইন বলে: প্রদত্ত কলাম নম্বর দ্বারা বা একটি এক্সপ্রেশন অনুসারে ফলাফলকে সাজায়। যদি অভিব্যক্তিটি একটি একক প্যারামিটার হয় তবে মানটি একটি কলাম নম্বর হিসাবে ব্যাখ্যা করা হয়। Gণাত্মক কলাম সংখ্যাগুলি সাজানোর ক্রমটিকে বিপরীত করে।গুগলের কাছে এটি ব্যবহারের অনেকগুলি উদাহরণ রয়েছে এবং কেন অনেকে এটি ব্যবহার বন্ধ করে দিয়েছে।
আপনার সাথে সত্য কথা বলতে, আমি 1996 ORDER BYএবং তার GROUP BYপরে কলাম নম্বরগুলি ব্যবহার করি নি (আমি তখন ওরাকল পিএল / এসকিউএল ডেভেলপমেন্ট করছিলাম)। কলাম নম্বরগুলি ব্যবহার করা সত্যই পুরানো-টাইমারদের জন্য এবং পশ্চাদপটে সামঞ্জস্যতা যেমন বিকাশকারীদের মাইএসকিউএল এবং অন্যান্য আরডিবিএমএস ব্যবহার করার অনুমতি দেয় যা এখনও এটির জন্য অনুমতি দেয়।
নীচের ক্ষেত্রে বিবেচনা করুন:
+------------+--------------+-----------+
| date | services | downloads |
+------------+--------------+-----------+
| 2016-05-31 | Apps | 1 |
| 2016-05-31 | Applications | 1 |
| 2016-05-31 | Applications | 1 |
| 2016-05-31 | Apps | 1 |
| 2016-05-31 | Videos | 1 |
| 2016-05-31 | Videos | 1 |
| 2016-06-01 | Apps | 3 |
| 2016-06-01 | Applications | 4 |
| 2016-06-01 | Videos | 2 |
| 2016-06-01 | Apps | 2 |
+------------+--------------+-----------+
অ্যাপ্লিকেশন এবং অ্যাপ্লিকেশনগুলিকে একই পরিষেবা হিসাবে বিবেচনা করে আপনাকে প্রতিদিন পরিষেবাতে ডাউনলোডের সংখ্যা খুঁজে বের করতে হবে। দ্বারা গোষ্ঠীবদ্ধ date, servicesস্থাপিত হবে Appsএবং Applicationsপৃথক সেবা বিবেচনা করা হচ্ছে।
সেক্ষেত্রে ক্যোয়ারীটি হ'ল:
select date, services, sum(downloads) as downloads
from test.zvijay_test
group by date,services
এবং আউটপুট:
+------------+--------------+-----------+
| date | services | downloads |
+------------+--------------+-----------+
| 2016-05-31 | Applications | 2 |
| 2016-05-31 | Apps | 2 |
| 2016-05-31 | Videos | 2 |
| 2016-06-01 | Applications | 4 |
| 2016-06-01 | Apps | 5 |
| 2016-06-01 | Videos | 2 |
+------------+--------------+-----------+
অ্যাপ্লিকেশন এবং অ্যাপ্লিকেশনগুলি গোষ্ঠীভুক্ত করা হ'ল এটি আপনার প্রয়োজনীয়তা নয়। তাহলে আমরা কি করতে পারি?
একটি উপায় হ'ল একটি এক্সপ্রেশন বা ফাংশন ব্যবহার করে প্রতিস্থাপন Appsকরা এবং তারপরে সেবারগুলিতে সেগুলি গ্রুপ করা:ApplicationsCASEIF
select
date,
if(services='Apps','Applications',services) as services,
sum(downloads) as downloads
from test.zvijay_test
group by date,services
তবে এটি এখনও পরিষেবাগুলিকে আলাদা আলাদা পরিষেবা হিসাবে বিবেচনা করে Appsএবং গোষ্ঠীভুক্ত করে Applicationsএবং আগের মতো একই আউটপুট দেয়:
+------------+--------------+-----------+
| date | services | downloads |
+------------+--------------+-----------+
| 2016-05-31 | Applications | 2 |
| 2016-05-31 | Applications | 2 |
| 2016-05-31 | Videos | 2 |
| 2016-06-01 | Applications | 4 |
| 2016-06-01 | Applications | 5 |
| 2016-06-01 | Videos | 2 |
+------------+--------------+-----------+
একটি কলাম সংখ্যার উপর দলবদ্ধকরণ আপনাকে একটি এলিয়াসযুক্ত কলামে ডেটা গ্রুপ করার অনুমতি দেয়।
select
date,
if(services='Apps','Applications',services) as services,
sum(downloads) as downloads
from test.zvijay_test
group by date,2;
এবং এইভাবে নীচের মত আপনি কাঙ্ক্ষিত আউটপুট প্রদান:
+------------+--------------+-----------+
| date | services | downloads |
+------------+--------------+-----------+
| 2016-05-31 | Applications | 4 |
| 2016-05-31 | Videos | 2 |
| 2016-06-01 | Applications | 9 |
| 2016-06-01 | Videos | 2 |
+------------+--------------+-----------+
আমি অনেকবার পড়েছি যে কোয়েরি লেখার একটি অলস উপায় বা এলিয়াসেড কলামে গ্রুপিং মাইএসকিউএলে কাজ করে না, তবে এটি এলিয়াসযুক্ত কলামগুলিতে গ্রুপিংয়ের উপায়।
এটি ক্যোয়ারী লেখার পছন্দের উপায় নয়, কেবলমাত্র যখন আপনার কোনও এলিয়াস কলামের উপর গ্রুপবদ্ধ করতে হবে তখনই এটি ব্যবহার করুন।
এটি ব্যবহারের কোনও বৈধ কারণ নেই। এটি কেবলমাত্র একটি অলস শর্টকাট বিশেষভাবে তৈরি করা হয়েছিল যাতে কিছু হার্ড-চাপযুক্ত বিকাশকারীকে আপনার গ্রুপিং বা পরে বাছাই করা বা কলামের ক্রম পরিবর্তন করে কোডটি খারাপভাবে ব্যর্থ হতে দেয়। আপনার সহযোগী বিকাশকারীদের বিবেচনা করুন এবং এটি করবেন না।
এটি আমার জন্য কাজ করা হয়। কোডটি সারিগুলিকে 5 টি গ্রুপ পর্যন্ত বিভক্ত করে।
SELECT
USR.UID,
USR.PROFILENAME,
(
CASE
WHEN MOD(@curRow, 5) = 0 AND @curRow > 0 THEN
@curRow := 0
ELSE
@curRow := @curRow + 1
/*@curRow := 1*/ /*AND @curCode := USR.UID*/
END
) AS sort_by_total
FROM
SS_USR_USERS USR,
(
SELECT
@curRow := 0,
@curCode := ''
) rt
ORDER BY
USR.PROFILENAME,
USR.UID
ফলাফল নিম্নলিখিত হিসাবে হবে
SELECT dep_month,dep_day_of_week,dep_date,COUNT(*) AS flight_count FROM flights GROUP BY 1,2;
SELECT dep_month,dep_day_of_week,dep_date,COUNT(*) AS flight_count FROM flights GROUP BY 1,2,3;
উপরের প্রশ্নগুলি বিবেচনা করুন: গ্রুপ 1 এর মাধ্যমে প্রথম কলাম দ্বারা গ্রুপ করা এবং 1,2 টির মাধ্যমে প্রথম এবং দ্বিতীয় কলাম দ্বারা গ্রুপ করা এবং 1,2,3 দ্বারা গ্রুপটি দ্বিতীয় এবং তৃতীয় কলামের মাধ্যমে গ্রুপ করা হবে। যেমন:
এই চিত্রটি প্রথম দুটি কলামকে ১,২ দ্বারা গোষ্ঠী দেখায় অর্থাৎ এটি ডেপ_ডেটের বিভিন্ন মান বিবেচনা করছে না গণনাটি খুঁজে বের করার জন্য (প্রথম দুটি কলামের সমস্ত স্বতন্ত্র সমন্বয় গণনা গণনা করার জন্য বিবেচনা করা হয়) অন্যদিকে দ্বিতীয় ক্যোয়ারির ফলাফল

চিত্র। এখানে এটি প্রথম সমস্ত তিনটি কলামকে বিবেচনা করছে এবং সেখানে গণনাটি খুঁজতে বিভিন্ন মান রয়েছে যেমন, এটি প্রথম তিনটি কলাম দ্বারা গোষ্ঠীভূত হয় (প্রথম তিনটি কলামের সমস্ত স্বতন্ত্র সমন্বয় গণনা গণনা করা হয়)।
order by 1বসে থাকলেই ব্যবহার করুনmysql>। কোডে, ব্যবহার করুনORDER BY id ASC। কেস, সুস্পষ্ট ক্ষেত্রের নাম এবং সুস্পষ্ট ক্রম নির্দেশটি নোট করুন।