با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش SQLite را دنبال می کنند. در مورادی که معمولا رکوردهای جداول دیتابیس زیاد می شوند، معمولا رکوردهایی را فیلدهای تکراری اما با مقادیر عددی متفاوت زیادی خواهید داشت، در چنین مواردی ممکن است بخواهید به عنوان مثال اجتماع مقادیر یک فیلد را به صورت گروه بندی شده بر اساس فیلدهای دیگر در خروجی query دریافت کنید. دستور GROUP BY در SQLite برای گروه بندی خروجی query بر اساس مقادیر یکسان رکوردها استفاده می شوند، برای آشنایی بیشتر با دستور GROUP BY در SQLite در ادامه ی مباحث این بخش با ما همراه باشید.
در این آموزش شما را با سینتکس دستور GROUP BY در SQLite و مثال هایی از آن آشنا خواهیم کرد.
دستور GROUP BY در SQLite در ادامه ی ساختار دستور SELECT و قبل از دستور ORDER BY قرار می گیرد :
1 2 3 4 5 | SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN |
شما می توانید بیش از یک ستون را در دستور GROUP BY اعمال کنید.
مثال
جدول COMPANY را با رکوردهای زیر در نظر بگیرید :
1 2 3 4 5 6 7 8 9 | 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 |
اگر می خواهید اجتماع کل salary را برای هر مشتری بدانید، از GROUP BY به صورت زیر استفاده کنید :
1 | sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME; |
نتیجه ی اجرای کد فوق به صورت زیر خواهد بود :
1 2 3 4 5 6 7 8 9 | NAME SUM(SALARY) ---------- ----------- Allen 15000.0 David 85000.0 James 10000.0 Kim 45000.0 Mark 65000.0 Paul 20000.0 Teddy 20000.0 |
سه رکورد دیگر را به جدول COMPANY با استفاده از دستور INSERT اضافه می کنیم :
1 2 3 | INSERT INTO COMPANY VALUES (8, 'Paul', 24, 'Houston', 20000.00 ); INSERT INTO COMPANY VALUES (9, 'James', 44, 'Norway', 5000.00 ); INSERT INTO COMPANY VALUES (10, 'James', 45, 'Texas', 5000.00 ); |
سپس جدول COMPANY شامل رکورد های زیر با مقادیر name تکراری خواهد بود :
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 2 3 4 5 6 7 8 9 | NAME SUM(SALARY) ---------- ----------- Allen 15000 David 85000 James 20000 Kim 45000 Mark 65000 Paul 40000 Teddy 20000 |
سپس از دستور ORDER BY بعد ازدستور GROUP BY به صورت زیر استفاده می کنیم :
1 2 | sqlite> SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY NAME DESC; |
نتیجه ی اجرای کد فوق به صورت زیر خواهد بود :
1 2 3 4 5 6 7 8 9 | NAME SUM(SALARY) ---------- ----------- Teddy 20000 Paul 40000 Mark 65000 Kim 45000 James 20000 David 85000 Allen 15000 |
در مورادی که داده های جداول شما در دیتابیس زیاد شده و رکوردهایی با مقادیر تکراری نیز ایجاد می شوند، مواردی پیش خواهد آمد که نیاز دارید نتیجه ی query را بر اساس یک مقداری که تکرار شده گروه بندی کنید، در اینگونه موراد استفاده از دستور GROUP BY در SQLite بهترین گزینه خواهد بود.