عبارة GROUP BY في Azure Cosmos DB
ينطبق على:
واجهة برمجة تطبيقات SQL
تقسم عبارة GROUP BY نتائج الاستعلام استناداً إلى قيم خاصية محددة واحدة أو أكثر.
ملاحظة
عبارة GROUP BY غير مدعومة في Azure Cosmos DB Python SDK.
بناء الجملة
<group_by_clause> ::= GROUP BY <scalar_expression_list>
<scalar_expression_list> ::=
<scalar_expression>
| <scalar_expression_list>, <scalar_expression>
الوسيطات
<scalar_expression_list>تحدد التعبيرات التي تُستخدَم لتقسيم نتائج الاستعلام.
<scalar_expression>يُسمح بأي تعبير عددي باستثناء الاستعلامات الفرعية العددية والتجميعات العددية. يجب أن يحتوي كل تعبير عددي على مرجع خاصية واحد على الأقل. لا يوجد حد لعدد التعبيرات الفردية أو العلاقة الأساسية لكل تعبير.
الملاحظات
عندما يستخدم استعلام عبارة GROUP BY، يمكن أن تحتوي عبارة SELECT على مجموعة فرعية من الخصائص ووظائف النظام المضمنة في عبارة GROUP BY فقط. الاستثناء الوحيد هو الوظيفة التجميعية التي يمكن أن تظهر في عبارة SELECT دون إدراجها في عبارة GROUP BY. يمكنك أيضاً تضمين القيم الحرفية في عبارة SELECT.
يجب أن تكون عبارة GROUP BY بعد عبارة SELECT وFROM وWHERE وقبل عبارة OFFSET LIMIT. لا يمكنك استخدام عبارة GROUP BY مع عبارة ORDER BY حالياً لكن ستُضاف هذه الميزة قريباً.
لا يُسمح لعبارة GROUP BY بأي مما يلي:
- إطلاق أسماء مستعارة على الخصائص أو وظائف النظام (لا تزال ميزة إطلاق الأسماء المستعارة متوفرة في عبارة SELECT)
- Subqueries
- وظائف النظام التجميعية (مسموح بها فقط في عبارة SELECT)
لا يتم دعم كلاً من الاستعلامات ذات وظيفة النظام التجميعية والاستعلام الفرعي مع GROUP BY. على سبيل المثال، لا يتم دعم الاستعلام التالي:
SELECT COUNT(UniqueLastNames)
FROM (
SELECT AVG(f.age)
FROM f
GROUP BY f.lastName
) AS UniqueLastNames
وبالإضافة إلى ذلك، يمكن أن تحتوي الاستعلامات GROUP BY عبر الأقسام على 21 وظيفة نظام تجميعية كحد أقصى.
أمثلة
تستخدم هذه الأمثلة عينة من مجموعة بيانات التغذية.
فيما يلي استعلام ينتج إجمالي عدد العناصر في كل مجموعة طعام:
SELECT TOP 4 COUNT(1) AS foodGroupCount, f.foodGroup
FROM Food f
GROUP BY f.foodGroup
بعض النتائج (تُستخدَم الكلمة الأساسية TOP لتقييد عدد النتائج) كما يلي:
[
{
"foodGroupCount": 183,
"foodGroup": "Cereal Grains and Pasta"
},
{
"foodGroupCount": 133,
"foodGroup": "Nut and Seed Products"
},
{
"foodGroupCount": 113,
"foodGroup": "Meals, Entrees, and Side Dishes"
},
{
"foodGroupCount": 64,
"foodGroup": "Spices and Herbs"
}
]
يحتوي هذا الاستعلام على تعبيرين يستخدمان لتقسيم النتائج:
SELECT TOP 4 COUNT(1) AS foodGroupCount, f.foodGroup, f.version
FROM Food f
GROUP BY f.foodGroup, f.version
وتكون بعض النتائج كالتالي:
[
{
"foodGroupCount": 183,
"foodGroup": "Cereal Grains and Pasta",
"version": 1
},
{
"foodGroupCount": 133,
"foodGroup": "Nut and Seed Products",
"version": 1
},
{
"foodGroupCount": 113,
"foodGroup": "Meals, Entrees, and Side Dishes",
"version": 1
},
{
"foodGroupCount": 64,
"foodGroup": "Spices and Herbs",
"version": 1
}
]
يحتوي هذا الاستعلام على وظيفة نظام في عبارة GROUP BY:
SELECT TOP 4 COUNT(1) AS foodGroupCount, UPPER(f.foodGroup) AS upperFoodGroup
FROM Food f
GROUP BY UPPER(f.foodGroup)
وتكون بعض النتائج كالتالي:
[
{
"foodGroupCount": 183,
"upperFoodGroup": "CEREAL GRAINS AND PASTA"
},
{
"foodGroupCount": 133,
"upperFoodGroup": "NUT AND SEED PRODUCTS"
},
{
"foodGroupCount": 113,
"upperFoodGroup": "MEALS, ENTREES, AND SIDE DISHES"
},
{
"foodGroupCount": 64,
"upperFoodGroup": "SPICES AND HERBS"
}
]
يستخدم هذا الاستعلام كلاً من الكلمات الأساسية ووظائف النظام في تعبير خاصية العنصر:
SELECT COUNT(1) AS foodGroupCount, ARRAY_CONTAINS(f.tags, {name: 'orange'}) AS containsOrangeTag, f.version BETWEEN 0 AND 2 AS correctVersion
FROM Food f
GROUP BY ARRAY_CONTAINS(f.tags, {name: 'orange'}), f.version BETWEEN 0 AND 2
والنتائج هي:
[
{
"foodGroupCount": 10,
"containsOrangeTag": true,
"correctVersion": true
},
{
"foodGroupCount": 8608,
"containsOrangeTag": false,
"correctVersion": true
}
]