با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش SQLite را دنبال می کنند. در بخش قبلی با کاربرد و عملکرد دستور GROUP BY در SQLite برای گروه بندی نتایج پرس و جوهای دریافتی در زمانیکه چند مقدار تکراری در یک فیلد داریم، آشنا شدیم. در شرایطی نیز ممکن است نیاز به تعریف یک ساختار شرطی در گروه بندی پرس و جوها داشته باشید. به عنوان مثال وقتیکه قصد دارید نتیجه ی query را بر اساس یک فیلد تکراری گروه بندی کنید، ممکن است بخواهید رکوردهایی که از یک مقداری بیشتر هستند یا از یک مقدار کمتر بوده و … در خروجی گروه بندی شده لیست شوند، برای تعریف چنین ساختارهای شرطی دستور HAVING در SQLite ارائه شده است که ادامه ی مباحث به آن پرداخته ایم.
در این آموزش شما با سینتکس اصلی و مثال هایی از کاربرد دستور HAVING در SQLite آشنا خواهید شد.
دستور HAVING در واقع اجازه ی تعریف شرط در ساختار GROUP BY را می دهد.
سینتکس و محل تعریف HAVING در ساختار SELECT به صورت زیر خواهد بود :
1 2 3 4 5 6 | SELECT FROM WHERE GROUP BY HAVING ORDER BY |
دستور HAVING باید در ادامه ی دستور GROUP BY در یک query قرار گرفته و همچنین می توان از ORDER BY نیز استفاده کرد.
در سینتکس زیر دستور SELECT شامل HAVING می باشد :
1 2 3 4 5 6 | SELECT column1, column2 FROM table1, table2 WHERE [ conditions ] GROUP BY column1, column2 HAVING [ conditions ] ORDER BY column1, column2 |
مثال
جدول COMPANY را با رکوردهای زیر در نظر بگیرید :
1 2 3 4 5 6 7 8 9 10 11 12 | ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 8 Paul 24 Houston 20000.0 9 James 44 Norway 5000.0 10 James 45 Texas 5000.0 |
در مثال زیر تمام رکوردهایی که تعداد فیلد name در تکراری آن ها کمتر از ۲ باشد، لیست می شود :
1 | sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) < 2; |
نتیجه ی اجرای کد فوق به صورت زیر خواهد بود :
1 2 3 4 5 6 7 | ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 2 Allen 25 Texas 15000 5 David 27 Texas 85000 6 Kim 22 South-Hall 45000 4 Mark 25 Rich-Mond 65000 3 Teddy 23 Norway 20000 |
در مثال زیر تمام رکوردهایی که تعداد فیلد name در تکراری آن ها بزرگتر از ۲ باشد، لیست می شود :
1 | sqlite > SELECT * FROM COMPANY GROUP BY name HAVING count(name) > 2; |
نتیجه ی اجرای کد فوق به صورت زیر خواهد بود :
1 2 3 | ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 10 James 45 Texas 5000 |
دستور HAVING در SQLite بسیار شبیه به دستور WHERE عمل می کند، با این تفاوت که دستور HAVING برای تعریف شرط در ادامه ی ساختار GROUP BY بکار می رود، و نتایج بازگشتی و گروه بندی شده از GROUP BY را فیلتر می کند.