دستور Count در SQL، یکی از مفیدترین توابع تجمعی است. این تابع به صورت خاص برای شمارش ردیفهای جدول در پایگاه داده استفاده میشود. میتوانیم با ترکیب دستور Count و سایر عبارتهای کلیدی SQL مانند [fdboutput]{“content”:”WHERE%20″,”type”:”inline”}[/fdboutput]و [fdboutput]{“content”:”ORDER%20BY”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”HAVING”,”type”:”inline”}[/fdboutput]و [fdboutput]{“content”:”GROUP%20BY”,”type”:”inline”}[/fdboutput] و غیره شرایط و سناریوهای متنوعی را مدیریت کنیم. برای مثال، شمردن تعداد کل سفارشهای مشتری خاصی که در طی چند روز اخیر داده است، تعداد بازدیدکنندگان مجزایی که در تاریخ معینی بلیت موزه را خریداری کردهاند یا تعداد کل کارمندان بخش مشخصی در شرکت، همگی این موارد با استفاده از دستور Count در SQL قابل محاسبه هستند. به طور کل، برای بدست آوردن موثرترین کوئریهای SQL باید از این دستورات و کلمات کلیدی به صورت ترکیبی استفاده کرد.
در این مطلب از مجله فرادرس، درباره دستور Count در SQL نوشتهایم. در ابتدای کار این دستور را تعریف کرده و سینتکس مربوط به آن را نمایش دادهایم. بعد از آن اشکال ابتدایی استفاده از دستور Count را همراه با مثالهای کدنویسی شده در سناریوهای سادهای نمایش دادیم. و در اواخر مطلب، انواع مهم ترکیبهای مختلف قابل استفاده از دستور Count را با سایر دستورات SQL همراه با سناریوهای پیچیده نمایش میدهیم. در این بخشها از کوئریهای پیچیدهای استفاده کردهایم که یادگیری و درک آنها تاثیر بسیار خوبی بر روی مهارت کدنویسی با زبان SQL دارد.
دستور Count در SQL چیست؟
دستور Count در SQL یکی از توابع تجمعی است که برای شمار دادههای درون جداول پایگاههای داده رابطهای کار میکند. با کمک این دستور میتوان دادهها را به صورت تکراری و غیر تکراری، با توجه به شرایط خاص، برای انجام عملیات و غیره شمارش کرد. در ادامه مطلب مهمترین کاربردها و انواع کوئریهای قابل پیادهسازی با این دستور را ارائه دادهایم.
کار با دستوراتی مانند Count در حوزه اجرای عملیات حرفهای و پیشرفته بر روی دادهها دستهبندی میشود. برای آشنا شدن با تکنیکهای حرفهای کوئری نویسی و حل سناریوهای پیچیده مربوط به مدیریت پایگاه داده پیشنهاد میکنیم که فیلم آموزش SQL Server در سطح پیشرفته را از وبسایت آموزشی فرادرس مشاهده کنید. برای کمک به مخاطبان عزیز، لینک فیلم را در ادامه قرار دادهایم.
اما قبل از پریدن به درون مثالهای مربوط به دنیای واقعی درباره استفاده از دستور Count، باید به سینتکس پایه استفاده از این دستور نگاهی داشته باشیم.
سینتکس دستور Count
برای آشنا شدن با دستور Count در SQL قبل از همه باید سادهترین شکل پیادهسازی و استفاده از این کد را بیاموزیم. در پایین سینتکس پایه مربوط به تابع Count را نمایش دادهایم.
SELECT COUNT([DISTINCT] <column_name>)
FROM <table_name>
WHERE <conditions>;
تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] در داخل بخش دستور SELECT در SQL ظاهر میشود و به عنوان آرگومان هم میتواند نام ستونی را بپذیرد. به صورت دلخواه، میتوانیم از دستور [fdboutput]{“content”:”DISTINCT”,”type”:”inline”}[/fdboutput]در تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] استفاده کنیم. این کار باعث میشود که فقط گزینههای یکتا از مقادیر مورد نظر، شمارش شوند و از شمردن موارد تکراری جلوگیری میکند. البته اگر در این مرحله متوجه مطلب نشدید جای نگرانی نیست، در ادامه این مطلب به صورت مفصل روش استفاده از دستور DISTINCT در SQL را به همراه تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] با کمک مثالهای مناسبی توضیح دادهایم.
یادگیری پیشرفته SQL با فرادرس
SQL یا «زبان پرس و جوی ساختاریافته» (Structured Query Language)، زبانی است که برای مدیریت و ارتباط با پایگاههای داده رابطهای استفاده میشود. به عبارتی، میتوان از این زبان برای ساخت پایگاه داده رابطهای و جداول درون آن، حذف و بهروزرسانی اطلاعات و استخراج داده استفاده کرد. درحال حاضر SQL یکی از پرکاربردترین زبانهای مربوط به مدیریت پایگاههای دادهای در سراسر جهان و صنایع و سیستمهای تجاری فعال دنیا است. یادگیری این پایگاه داده حرفهای باعث گشوده شدن موقعیتهای شغلی فراوان برای برنامهنویسان میشود.
فرادرس به عنوان بزرگترین تولیدکننده محتوی آموزشی فارسی، تلاش کرده که همه زبانهای برنامهنویسی و تکنولوژیها مربوط به مدیریت پایگاههای داده را نیز پوشش دهد. به همین جهت فیلمهای آموزشی بسیار مناسبی را برای آموزش SQL Server تهیه کرده است. SQL Server یکی از پایگاههای داده بسیار مشهور و قدرتمندی است که به طور کامل از زبان SQL استفاده میکند. آموزش این پایگاه داده به معنی یادگیری حرفهای زبان SQL است. با مشاهده منظم این فیلمها و تمرین هر روزه میتوانید، بر روی کار با پایگاههای دادهای که با زبان SQL کار میکنند، به طور بسیار خوبی مسلط شوید. در ادامه چند مورد از این فیلمهای آموزشی را در سطوح علمی مختلف قرار دادهایم.
- فیلم آموزش اس کیو ال سرور سطح مقدماتی با فرادرس
- فیلم آموزش SQL Server سطح تکمیلی با فرادرس
- فیلم آموزش اس کیو ال سرور سطح پیشرفته با فرادرس
- فیلم آموزش رایگان پروژه محور اس کیو ال سرور درباره ایجاد ویو سفارش فروشگاهی با فرادرس
- فیلم آموزش استفاده از «جیسون» (JSON) در SQL با فرادرس
مثالی برای استفاده از دستور Count
در این قسمت از مطلب به بررسی عمیقتر دستور [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput]و روشهای بسیار متنوعی که برای استفاده از این تابع وجود دارد پرداخته و از مثالهای مربوط به کاربردهای این توابع در دنیای واقعی استفاده کردهایم.
برای اینکه با دستورات SQL آشنا شده و بهتر بتوانیم از این زبان مخصوص پایگاههای داده رابطهای استفاده کنیم، خوب است که فیلم مربوط به آموزش کار با پایگاه داده SQL Server را از فرادرس مشاهده کنیم. SQL Server به عنوان سامانهای برای مدیریت پایگاه داده (DBMS) با ویژگیهایی همچون قدرت مدیریت انبوه دادهها، انجام عملیات CRUD، کوئریهای پیشرفته و امنیت بالا شناخته میشود. همچنین به طور کامل با زبان SQL سازگار است. برای کمک به شما لینک مربوط به این اموزش را در ادامه قرار دادهایم.
مثال
برای نمایش بصری این دستورات، فرض کنیم که در شرکت مخصوصی برای فروش خودرو و موتور سیکلت کار میکنیم. به همین ترتیب، جدولی پر از دادههای مربوط به محصولات شرکت به شکل زیر در دسترس مدیر پایگاه داده قرار دارد. نام این جدول [fdboutput]{“content”:”products”,”type”:”inline”}[/fdboutput] است.
در این جدول پنج ستون اصلی با جزئیات پایین قرار دارند.
- [fdboutput]{“content”:”product_code”,”type”:”inline”}[/fdboutput] : کد یکتایی که برای شناسایی محصولات به صورت جداگانه بهکار برده میشود.
- [fdboutput]{“content”:”product_name”,”type”:”inline”}[/fdboutput] : در این ستون نام خودرو یا موتورسیکلت قرار داده میشود.
- [fdboutput]{“content”:”product_line”,”type”:”inline”}[/fdboutput] : این ستون دستهبندی را نگهداری میکند که موتورسیکلت یا خودرو بودن محصول را مشخص میکند.
- [fdboutput]{“content”:”product_vendor”,”type”:”inline”}[/fdboutput] : کدی که نشاندهنده خوردهفروش مربوط به هر کدام از محصولات است.
- [fdboutput]{“content”:”buy_price”,”type”:”inline”}[/fdboutput] : قیمتی که فروشنده برای محصول در نظر میگیرد.
چند مدل کوئری ساده
تا به اینجای کار، با تکنیکهای مربوط به ساخت جدول در SQL، دادههای مورد نیاز برای پیادهسازی مثالها را در جدول [fdboutput]{“content”:”products”,”type”:”inline”}[/fdboutput] ایجاد کردهایم. به عنوان مثالی بسیار ساده در ادامه میخواهیم تعداد محصولات موجود در جدول را بدست بیاوریم. اینجا دقیقا محلی است که تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] به مدیر پایگاه داده کمک میکند. کوئری مورد نظر چیزی شبیه به مورد پایین خواهد شد.
SELECT COUNT(product_code)
FROM products;
بر اثر اجرای کوئری بالا بر روی جدول، خروجی زیر به کاربر نمایش داده میشود.
5
در کوئری بالا، SQL همه مقادیر موجود در ستون [fdboutput]{“content”:”product_code”,”type”:”inline”}[/fdboutput] از جدول [fdboutput]{“content”:”products”,”type”:”inline”}[/fdboutput]را شمرده و نتیجه کل را به کاربر برمیگرداند. این اتفاق به آن دلیل روی میدهد که ستون [fdboutput]{“content”:”product_code”,”type”:”inline”}[/fdboutput] را به عنوان آرگومان به تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] خود در کوئری ارسال کردهایم. البته روش دیگری هم برای محاسبه تعداد ردیفهای جدول [fdboutput]{“content”:”products”,”type”:”inline”}[/fdboutput] وجود دارد. کافی است که فقط بهسادگی کد زیر را تایپ کنیم.
SELECT COUNT(*)
FROM products;
با اجرای این کد، بازهم در خروجی عدد [fdboutput]{“content”:”5″,”type”:”inline”}[/fdboutput] را خواهیم دید.
در کوئری بالا به عنوان آرگومان تابع از نماد ستاره [fdboutput]{“content”:”*”,”type”:”inline”}[/fdboutput] استفاده کردیم. این نماد به صورت بسیار سادهای به SQL میگوید که همه ردیفهای درون جدول را بشمار.
فرض کنیم الان میخواهیم همه خطوط تولید موجود در جدول را بشماریم. بر اساس چیزی که تا به حال آموختهایم، احتمالا کوئری خود را به شکل زیر خواهیم نوشت.
SELECT COUNT(product_line)
FROM products;
خوب خروجی این کد هم برابر با عدد [fdboutput]{“content”:”5″,”type”:”inline”}[/fdboutput] خواهد بود. به این دلیل که SQL به ازای هر ردیف در جدول یکبار مقدار موجود در ستون [fdboutput]{“content”:”product_line”,”type”:”inline”}[/fdboutput] را شمارش کرده است. مهم است که به یاد داشته باشیم، تابع[fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput]به صورت پیشفرض تکراری بودن موارد را در نظر نمیگیرد. برای نمونه، جدول محصولات [fdboutput]{“content”:”products”,”type”:”inline”}[/fdboutput]فقط دو مقدار متفاوت [fdboutput]{“content”:”Motorcycles”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”Classic%20Cars”,”type”:”inline”}[/fdboutput] را در ستون [fdboutput]{“content”:”product_line”,”type”:”inline”}[/fdboutput] دارد، اما کوئری که نوشتهایم مقدار [fdboutput]{“content”:”5″,”type”:”inline”}[/fdboutput] را به خروجی برگردانده است. اگر بخواهیم که فقط مقادیر یکتا موجود در جدول را بشمریم، لازم است که از کلمه کلیدی [fdboutput]{“content”:”DISTINCT”,”type”:”inline”}[/fdboutput] در تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] خود استفاده کنیم.
SELECT COUNT(DISTINCT product_line)
FROM products;
این بار با اجرای کد بالا عدد [fdboutput]{“content”:”2″,”type”:”inline”}[/fdboutput] در خروجی ظاهر میشود.
در کوئری بالا، از آنجا که به صورت صریح از کلمه کلیدی [fdboutput]{“content”:”DISTINCT”,”type”:”inline”}[/fdboutput]در بخش آرگومان تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] استفاده کردهایم، SQL متوجه شده و فقط مقادیر یکتای موجود در ستون [fdboutput]{“content”:”product_line”,”type”:”inline”}[/fdboutput] را شمرده و در خروجی نمایش میدهد.
همچنین میتوانیم از شرایط مختلفی در بند [fdboutput]{“content”:”WHERE%20″,”type”:”inline”}[/fdboutput] کوئری خود استفاده کنیم تا SQL فقط ردیفهای مشخصی را بشمارد. برای مثال، فرض کنیم باید تعداد محصولاتی را تعیین کنیم که فقط در خط تولید مربوط به موتورسیکلت تولید شدهاند. برای انجام این کار میتوانیم از کوئری پایین استفاده کنیم.
SELECT COUNT(product_code)
FROM products
WHERE product_line = ‘Motorcycles’;
خروجی حاصل از کوئری بالا به صورت عدد [fdboutput]{“content”:”3″,”type”:”inline”}[/fdboutput] به کاربر نمایش داده میشود.
بر اثر اجرای کوئری بالا، در ابتدا SQL همه ردیفهایی را که مقدار متناظر آنها در ستون [fdboutput]{“content”:”product_line”,”type”:”inline”}[/fdboutput] برابر با [fdboutput]{“content”:”Motorcycles”,”type”:”inline”}[/fdboutput] است، فیلتر میکند. سپس کد محصولات فیلتر شده را میشمرد.
یکی از موارد مهمی که باید خاطرنشان شویم، این است که تابع Count در SQL، مقادیر «NULL» را در زمان شمردن در نظر نمیگیرد. در جدول [fdboutput]{“content”:”products”,”type”:”inline”}[/fdboutput]، مقدار [fdboutput]{“content”:”product_vendor”,”type”:”inline”}[/fdboutput] برای کد[fdboutput]{“content”:”%20S10_4757″,”type”:”inline”}[/fdboutput] در ستون [fdboutput]{“content”:”product_code”,”type”:”inline”}[/fdboutput] برابر با «NULL» است. در نتیجه کوئری زیر بهجای مقدار [fdboutput]{“content”:”5″,”type”:”inline”}[/fdboutput] ، عدد [fdboutput]{“content”:”4″,”type”:”inline”}[/fdboutput] را برمیگرداند.
SELECT COUNT(product_vendor)
FROM products;
خروجی کوئری بالا برابر با مقدار زیر است.
4
در کوئری بالا با اینکه مقادیر [fdboutput]{“content”:”HLD”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”CMC”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”HMD”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”RSD”,”type”:”inline”}[/fdboutput] شامل شمارش تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] شدهاند اما مقدار NULL استثنا شده است.
انواع کاربردهای پیشرفته دستور Count در SQL
دستور Count در SQL برای شمردن تعداد رکوردها در شرایط مختلف و با توجه به دادههای مختلف برنامه بهکار برد میشود. میدانیم که این دستور یکی از دستورات تجمعی است. در این قسمت، انواع کوئریهایی که میتوان در آنها از دستور Count استفاده کرد را همراه با شرایط و مثالهای مختلف بررسی کردهایم.
در ادامه مطلب به بررسی روش کار دستور Count در ترکیب با بند GROUP BY پرداختهایم. اما در صورتی که نسبت به عبارت GROUP BY آشنایی کافی ندارید، پیشنهاد میکنیم که مطلب رایگان از کاربرد تا نحوه استفاده دستور Group by در SQL به زبان ساده را از مجله فرادرس مطالعه کنید.
دستور Count در SQL در کنار بند GROUP BY
اگر به عنوان تحلیلگر داده کار میکنید یا در آرزوی رسیدن به این موقعیت شغلی هستید، باید بتوانید از SQL برای پروژههای «تحلیل داده» (Data Analysis) استفاده کنید. در تحلیل داده با SQL، بیشتر مواقع باید از تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] همراه با بند [fdboutput]{“content”:”GROUP%20BY”,”type”:”inline”}[/fdboutput] استفاده کنیم.
دستور GROUP BY در SQL برای کمک به محاسبه اندازهگیریهای تجمعی به دستهبندی دادهها در گروههای مختلفی کمک میکند. از بعضی توابع تجمعی در دسترس در SQL، میتوان به [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”SUM()”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”AVG()”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”MIN()”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”MAX()”,”type”:”inline”}[/fdboutput] اشاره کرد.
توابع تجمعی به توابعی میگویند که: مقدار مورد نظر در چندین ردیف مختلف را با توجه به نوع تابع محاسبه و تجمیع کرده و در نهایت فقط یک عدد را به عنوان خروجی برمیگردانند. تجمع در دادهها بسیار مهم است. زیرا همیشه این امکان وجود ندارد که مدیر پایگاه داده برای کسب دانش و اطلاعات خاصی خودش به میان دادههای جدول رفته و هر ردیف را به صورت مجزا پردازش کند.
در پایین مثالهایی از تجمیع دادهها بر اساس معیارهای مختلف را ارائه دادهایم.
- دستهبندی مشتریها بر اساس نیازهای خاص یا رفتار آنها
- دستهبندی محصولات به انواع مختلف
- دستهبندی مردم مختلف بر اساس میزان درآمد آنها
همه دستهبندیهای بالا، نمونههایی از تجمیع دادهها هستند. این تجمیع دادهها را با کمک توابع تجمعی انجام میدهند.
برای کمک به درک بهتر مطلب بالا در ادامه، مثالی را از تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] نمایش دادهایم. فرض کنیم که میخواهیم تعداد محصولات موجود را در هر خط تولید محاسبه کنیم.
برای این کار از کوئری پایین استفاده میکنیم.
SELECT product_line,
COUNT(product_code)
FROM products
GROUP BY product_line;
خروجی این کوئری به صورت جدول زیر نمایش داده میشود.
product_line | COUNT(product_code) |
---|---|
Motorcycles | 3 |
Classic Cars | 2 |
در کوئری بالا، SQL در ابتدا همه مقادیر یکتای موجود در ستون [fdboutput]{“content”:”product_line”,”type”:”inline”}[/fdboutput] را به عنوان ستون اول بدست میآورد. سپس برای هر کدام از مقادیر یکتای پیدا شده، تعداد محصولات موجود در ستون[fdboutput]{“content”:”product_code”,”type”:”inline”}[/fdboutput] را میشمارد. به عبارت کوتاهتر، SQL همه ردیفها را بر اساس خط تولید محصول تجمیع میکند و پس از آن از تابع تجمعی – در این کوئری [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] – برای محاسبه تعداد محصولات هر خط تولید استفاده کرده است.
بسیار مهم است که همه ستونهای مشخص شده در دستور [fdboutput]{“content”:”SELECT”,”type”:”inline”}[/fdboutput] را در بند [fdboutput]{“content”:”GROUP%20BY”,”type”:”inline”}[/fdboutput] کوئری هم نام بریم. البته این قائده شامل توابع تجمعی نمیشود. در غیر این صورت، SQL پیغام خطایی را به خارج برمیگرداند.
تا اینجای کار، در همه مثالهایی که در این مطلب نمایش دادهایم، از تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] در بخش [fdboutput]{“content”:”SELECT”,”type”:”inline”}[/fdboutput] کوئری استفاده کردهایم. اگرچه، تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput]، تابعی همه کاره است و میتوانیم آن را به روشهای متنوعی در بخشهای مختلفی از کوئری بهکار ببریم. در ادامه مطلب به روشهای مختلف استفاده از تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput]در سایر بخشهای کوئری نیز نگاهی خواهیم داشت.
دستور Count در بند HAVING به صورت شرطی
عبارت HAVING در SQL بر اساس شرایطی که به توابع تجمعی تحمیل میکند، برای فیلتر کردن گروهها بهکار برده میشود. برای نمونه، فرض کنیم که باید گروههای تجمیع شدهای را برگردانیم که تعدادشان از عدد مشخصی بیشتر باشد.
به عنوان مثال، تصور کنید در روی مجموعه دادهی موجود فقط به دنبال آن خط تولیدهایی هستیم که در آنها بیشتر از دو محصول تولید میشود.
کوئری مورد نظر برای این درخواست به شکل زیر خواهد بود.
SELECT product_line,
COUNT(product_code)
FROM products
GROUP BY product_line
HAVING COUNT(product_code)>2;
خروجی کوئری بالا به صورت زیر خواهد بود.
product_line | COUNT(product_code) |
---|---|
Motorcycles | 3 |
این کوئری هم شبیه به کوئری قبلی کار میکند. یعنی در این مورد هم SQL ردیفها را بر اساس مقدار یکتای دادههای درون ستون [fdboutput]{“content”:”product_line”,”type”:”inline”}[/fdboutput] دستهبندی میکند. سپس با استفاده از تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput]تعداد محصولات متعلق به هر خط تولید را برمیگرداند. اگرچه، از آنجا که تصمیم گرفتهایم که دادههای مربوط به خطوط تولیدی را نگهداری کنیم که بیش از دو محصول دارند، دادههای خط تولید مربوط به خودروهای کلاسیک را – که فقط دارای دو محصول است – در نتایج نهایی نداریم.
دستور Count در SQL همراه با بند ORDER BY
یکی از مواردی که میتوانیم با استفاده از دستور Count داشته باشیم، لیست همه خطوط تولید به صورت مرتب شده بر اساس تعداد محصول موجود در هر خط تولید است. در چنین مواردی از دستور Count همراه با بند ORDER BY در SQL استفاده میکنیم.
کوئری مربوط به سناریو گفته شده در بالا به صورت زیر پیادهسازی میشود.
SELECT product_line,
COUNT(product_code)
FROM products
ORDER BY COUNT(product_line);
بر اثر اجرای کوئری بالا بر روی جدول ابتدای مطلب، جدول زیر به عنوان جواب به خروجی برگشت داده میشود.
product_line | COUNT(product_code) |
---|---|
Classic Cars | 2 |
Motorcycles | 3 |
در کوئری بالا، SQL خطوط تولید یکتا را به عنوان گروهها و تعداد محصول تولید شده در هر گروه را به عنوان شماره مورد نظر برای مرتبسازی در نظر گرفته و در خروجی برمیگرداند. اگرچه به دلیل بند [fdboutput]{“content”:”ORDER%20BY”,”type”:”inline”}[/fdboutput] نتایج مرتب شده بر اثر تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] به صورت صعودی مرتب شدهاند.
استفاده از دستور Count در SQL در بند WHERE همراه با شرط
تابع Count را نمیتوان به صورت مستقیم در بند WHERE در SQL استفاده کرد. بنابراین برای مثال، اگر اطلاعات مربوط به محصولاتی را بخواهیم که متعلق به خطوط تولید با حداقل [fdboutput]{“content”:”3″,”type”:”inline”}[/fdboutput] محصول هستند، نمیتوانیم از این کوئری استفاده کنیم.
SELECT *
FROM products
WHERE COUNT(product_line)>=3;
خروجی حاصل از اجرای کوئری بالا به صورت زیر به کاربر نمایش داده میشود.
ERROR 1111 (HY000): Invalid use of group function
همچنین این کار را فقط با کمک بندهای [fdboutput]{“content”:”GROUP%20BY”,”type”:”inline”}[/fdboutput] و [fdboutput]{“content”:”HAVING”,”type”:”inline”}[/fdboutput] نیز نمیتوانیم به طور مستقیم انجام دهیم. زیرا این دستورات فقط ردیفهای دستهبندی شده را در خروجی نمایش میدهند نه همه جزئیات مربوط به همه محصولاتی را که نیاز داریم.
در عوض، میتوانیم از چیز دیگری به نام زیرکوئری استفاده کنیم. زیرکوئری به کوئری میگویند که درون کوئری اصلی قرار دارد. در نتیجه کوئری نهایی به شکل زیر نوشته خواهد شد.
SELECT *
FROM products
WHERE product_line in (SELECT product_line
FROM products
GROUP BY product_line
HAVING COUNT(product_code)>=3);
بر اثر اجرای کوئری بالا جدول زیر در خروجی به کاربران نمایش داده میشود.
انواع پایگاه داده از آشنایی ابتدایی تا تسلط
پایگاههای داده انواع بسیار گوناگونی دارند. شرکتها یا تیمهای نرمافزاری مختلف بنابر نیاز خود پایگاه داده خاصی را ابداع کردهاند. اما همه این پایگاههای داده با اقبال بین برنامه نویسان و مدیران پایگاه داده روبهرو نشدند. در عوض بعضی از این پایگاههای داده هم با توجه به کاربرد اختصاصی خود شهرت جهانی پیدا کردند. بعضی از آنها برای کار بر روی نرمافزارهای دسکتاپی یا نرمافزارهایی با حجم دادههای کم عالی هستند و بعضی دیگر برای کار با سیستمهای بسیار پیچیدهای طراحی شدهاند که سرورهای آنها از لحاظ فیزیکی در مناطق مختلف جغرافیایی قرار گرفتهاند.
فرادرس تلاش کرده تا بهترین آموزشها را از لحاظ کیفیت، مختصر گویی و جامعیت علمی تهیه کند. پس در زمینه پایگاه داده هم دست به تولید فیلمهای مختلفی برای هر کدام از پایگاههای داده محبوب و کاربردی دنیا زده است. فیلمهای آموزشی فرادرس از سطوح ابتدایی تا سطوح پیشرفته حتی اجرای پروژههای در حد دنیای واقعی را پوشش دادهاند. در این قسمت از مطلب، به معرفی چند فیلم مختلف درباره چند پایگاه داده گوناگون پرداختهایم. برای اینکه فیلمهای بیشتری درباره این پایگاههای داده ببینید یا با پایگاههای داده بیشتری آشنا شوید میتوانید بر روی تصویر بالا کلیک کرده تا به صفحه اصلی این مجموعه آموزشی هدایت شوید.
- فیلم آموزش پایگاه داده MySQL با فرادرس
- فیلم آموزش مدیریت بانک اطلاعاتی با Oracle، سطح مقدماتی در فرادرس
- فیلم آموزش رایگان پایگاه داده «کلیک هاوس» (ClickHouse) مربوط به مبانی و مقدمات با فرادرس
- فیلم آموزش SQL Server، دوره تکمیلی با فرادرس
- فیلم آموزش پایگاه داده اس کیو لایت SQLite در پایتون با فرادرس
جمع بندی
تا الان، با مطالعه این مطلب، به درک شایستهای از روش استفاده تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] رسیدهایم. به محض شروع به استفاده از تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] در کوئریهای خود، بازهم به دانش بیشتری از این تابع دست خواهیم یافت. تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] برای شمارش ردیفها در SQL به کار برده میشود. میتوانیم به این تابع بگوییم که ردیفهای تکراری را نشمارد یا فقط ردیفهایی با شرایط خاص را بشمارد. میتوانیم کوئریها را به صورتی درون هم بنویسیم که شرایط خاصی بعد از شمارش ردیفهای خاصی اجرا شوند. به طور کل توابع تجمعی مخصوصا تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] کاربردی بسیار گستردهتر از چیزی دارند که در ابتدا از ظاهر آنها تشخیص داده میشود.
در این مطلب از مجله فرادرس درباره دستور Count در SQL مطالعه کردیم. این دستور یکی از توابع تجمعی است که برای شمارش دادهها و برگرداندن عددی به صورت مجزا به کاربرده میشود. بالای مطلب با تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] آشنا شده و سپس کاربردهای مختلف این دستور را با نمایش سینتکس ابتدایی آن بررسی کردیم. در ادامه، از سادهترین کوئریهای ممکن تا کوئریهای پیچیده قابل ارائه با کمک تابع [fdboutput]{“content”:”COUNT()”,”type”:”inline”}[/fdboutput] را نمایش دادیم و در نهایت فیلمهای آموزشی مربوط به انواع پایگاههای دادهای که با زبان SQL کار میکنند را معرفی کردیم.
نوشته دستور Count در SQL – از کاربرد تا نحوه استفاده به زبان ساده اولین بار در فرادرس – مجله. پدیدار شد.
source