Câu lệnh GROUP BY
nhóm các hàng có cùng giá trị thành các hàng tóm tắt, chẳng hạn như "tìm số lượng khách hàng ở mỗi quốc gia"
Câu lệnh GROUP BY
thường được sử dụng với các hàm tổng hợp [COUNT[]
, MAX[]
, MIN[]
, SUM[]
, AVG[]
] để nhóm tập hợp kết quả theo một hoặc nhiều cột
NHÓM THEO Cú pháp
CHỌN tên_cột
TỪ tên_bảng
điều kiện ở đâu
NHÓM THEO [các] tên_cột
ĐẶT HÀNG BẰNG [các] tên_cột;
Cơ sở dữ liệu demo
Dưới đây là một lựa chọn từ bảng "Khách hàng" trong cơ sở dữ liệu mẫu của Northwind
CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Đức2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222Mexico D. F. 05021Mexico3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D. F. 05023Mexico4Xung quanh Sừng Thomas Hardy120 Hanover Sq. Luân ĐônWA1 1DPUK5Berglunds snbbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Thụy Điển
NHÓM SQL THEO Ví dụ
Câu lệnh SQL sau đây liệt kê số lượng khách hàng ở mỗi quốc gia
Thí dụ
SELECT COUNT[CustomerID], Quốc gia
Từ khách hàng
NHÓM THEO Quốc gia;
Câu lệnh SQL sau liệt kê số lượng khách hàng ở mỗi quốc gia, được sắp xếp từ cao xuống thấp
Thí dụ
SELECT COUNT[CustomerID], Quốc gia
Từ khách hàng
NHÓM THEO Quốc gia
ĐẶT HÀNG BẰNG SỐ LƯỢNG[CustomerID] DESC;
Cơ sở dữ liệu demo
Dưới đây là một lựa chọn từ bảng "Đơn hàng" trong cơ sở dữ liệu mẫu của Northwind
OrderIDCustomerIDEemployeeIDOrderDateShipperID102489051996-07-043102498161996-07-051102503441996-07-082
Prisma Client cho phép bạn đếm các bản ghi, tổng hợp các trường số và chọn các giá trị trường riêng biệt
tổng hợp
Prisma Client cho phép bạn trên các trường số [chẳng hạn như
8 và
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
_count: {
age: true,
},
}]
9] của một mô hình. Truy vấn sau đây trả về độ tuổi trung bình của tất cả người dùng
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
_count: {
age: true,
},
}]
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
}]
console.log['Average age:' + aggregations._avg.age]
Bạn có thể kết hợp tổng hợp với lọc và đặt hàng. Ví dụ: truy vấn sau đây trả về độ tuổi trung bình của người dùng
- Sắp xếp theo thứ tự của
0 tăng dần{
_avg: {
age: null
},
_count: {
age: 9
}
}
- Trong đó
1 chứa{
_avg: {
age: null
},
_count: {
age: 9
}
}
2{
_avg: {
age: null
},
_count: {
age: 9
}
}
- Giới hạn cho 10 người dùng
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Giá trị tổng hợp là nullable
Trong 2. 21. 0 trở lên, tập hợp trên các trường nullable có thể trả về một giá trị
3 hoặc
{
_avg: {
age: null
},
_count: {
age: 9
}
}
4. Điều này không bao gồm
{
_avg: {
age: null
},
_count: {
age: 9
}
}
5, luôn trả về 0 nếu không tìm thấy bản ghi nào
{
_avg: {
age: null
},
_count: {
age: 9
}
}
Xem xét truy vấn sau đây, trong đó
0 là nullable trong lược đồ
{
_avg: {
age: null
},
_count: {
age: 9
}
}
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
_count: {
age: true,
},
}]
Ẩn kết quả CLI
{
_avg: {
age: null
},
_count: {
age: 9
}
}
Truy vấn trả về
7 trong một trong các trường hợp sau
{
_avg: {
age: null
},
_count: {
age: 9
}
}
- không có người dùng
- Giá trị của trường
0 của mọi người dùng là
{
_avg: {
age: null
},
_count: {
age: 9
}
}
4
{
_avg: {
age: null
},
_count: {
age: 9
}
}
Điều này cho phép bạn phân biệt giữa giá trị tổng hợp thực [có thể bằng 0] và không có dữ liệu
Nhóm theo
Prisma Client's cho phép bạn nhóm các bản ghi theo một hoặc nhiều giá trị trường - chẳng hạn như
1 hoặc
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
1 và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
3 và thực hiện tổng hợp trên từng nhóm, chẳng hạn như tìm độ tuổi trung bình của những người sống trong một thành phố cụ thể.
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
0 là GA trong 2. 20. 0 trở lên
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Video sau đây sử dụng
0 để tóm tắt tổng số ca nhiễm COVID-19 theo lục địa
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Ví dụ sau nhóm tất cả người dùng theo trường
1 và trả về tổng số lượt xem hồ sơ cho mỗi quốc gia
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Hiển thị kết quả CLI
lọc theo nhóm
0 hỗ trợ hai cấp độ lọc.
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
8 và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
9
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Lọc bản ghi với
8
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Sử dụng
8 để lọc tất cả các bản ghi trước khi nhóm. Ví dụ sau nhóm người dùng theo quốc gia và tính tổng lượt xem hồ sơ, nhưng chỉ bao gồm những người dùng có địa chỉ email chứa
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
2
{
_avg: {
age: null
},
_count: {
age: 9
}
}
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
}]
Lọc các nhóm có
Sử dụng
9 để lọc toàn bộ nhóm theo giá trị tổng hợp, chẳng hạn như tổng hoặc giá trị trung bình của một trường, không phải bản ghi riêng lẻ - ví dụ: chỉ trả về các nhóm có giá trị trung bình
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
4 lớn hơn 100
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
}]
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
Trường hợp sử dụng để có Trường hợp sử dụng chính cho
9 là lọc các tập hợp. Chúng tôi khuyên bạn nên sử dụng
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
8 để giảm kích thước tập dữ liệu của mình càng nhiều càng tốt trước khi nhóm, vì làm như vậy ✔ giảm số lượng bản ghi mà cơ sở dữ liệu phải trả về và ✔ sử dụng các chỉ số
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Ví dụ: truy vấn sau nhóm tất cả người dùng không đến từ Thụy Điển hoặc Ghana
const fd = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
notIn: ['Sweden', 'Ghana'],
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_min: {
gte: 10,
},
},
},
}]
Truy vấn sau đây về mặt kỹ thuật đạt được kết quả tương tự, nhưng loại trừ người dùng từ Ghana sau khi nhóm. Điều này không mang lại bất kỳ lợi ích nào và không được khuyến nghị thực hành
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
Ghi chú. Trong phạm vi
9, bạn chỉ có thể lọc các giá trị hoặc trường tổng hợp có sẵn trong
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
8
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
}]
đặt hàng theo nhóm
Các ràng buộc sau áp dụng khi bạn kết hợp
0 và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
0
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
- Bạn có thể
0 trường có trong
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
8
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
}]
- Bạn có thể tổng hợp
0 [Xem trước trong 2. 21. 0 trở lên]
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
- Nếu bạn sử dụng
4 và/hoặc
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
5 với
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
0, bạn cũng phải bao gồm
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
0 trong truy vấn
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
Thứ tự theo nhóm tổng hợp
Bạn có thể đặt hàng theo nhóm tổng hợp. Prisma đã thêm hỗ trợ để sử dụng `orderBy với các nhóm tổng hợp trong cơ sở dữ liệu quan hệ trong phiên bản 2. 21. 0 và hỗ trợ MongoDB trong 3. 4. 0
Ví dụ sau đây sắp xếp từng nhóm
3 theo số lượng người dùng trong nhóm đó [nhóm lớn nhất trước]
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
Hiển thị kết quả CLI
Thứ tự theo lĩnh vực
Truy vấn sau sắp xếp các nhóm theo quốc gia, bỏ qua hai nhóm đầu tiên và trả về nhóm thứ 3 và thứ 4
0
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
nhómByCâu hỏi thường gặp
Tôi có thể sử dụng
9 với
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
0 không?
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Bạn không thể sử dụng
9 với
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
0. Tuy nhiên, tất cả các trường có trong
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
8 sẽ tự động được trả về
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
}]
Sự khác biệt giữa việc sử dụng
8 và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
9 với
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
0 là gì?
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
8 lọc tất cả các bản ghi trước khi nhóm và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
9 lọc toàn bộ nhóm và hỗ trợ lọc trên một giá trị trường tổng hợp, chẳng hạn như trung bình hoặc tổng của một trường cụ thể trong nhóm đó
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Sự khác biệt giữa
0 và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
0 là gì?
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
Cả hai bản ghi nhóm
0 và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
0 theo một hoặc nhiều giá trị trường duy nhất.
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
0 cho phép bạn tổng hợp dữ liệu trong mỗi nhóm - ví dụ: trả về số lượt xem trung bình trên các bài đăng từ Đan Mạch - trong khi khác biệt thì không
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
Đếm
Sử dụng để đếm số lượng bản ghi hoặc giá trị trường không phải ____3_______4. Ví dụ truy vấn sau đây đếm tất cả người dùng
1
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Quan hệ đếm
Khả năng đếm quan hệ có sẵn trong phiên bản 3. 0. 1 trở lên
Đối với các phiên bản trước 3. 0. 1
Bạn cần thêm6 rồi chạy
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
7
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
Để trả về số lượng quan hệ [ví dụ: số lượng bài đăng của người dùng], hãy sử dụng tham số
8 với
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
9 lồng nhau như được hiển thị
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
2
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Hiển thị kết quả CLI
Tham số
8
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
- Có thể được sử dụng bên trong một
1 cấp cao nhất hoặc
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
9
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
- Có thể được sử dụng với bất kỳ truy vấn nào trả về bản ghi [bao gồm
3,
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
4 và
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
5]
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
- có thể trở lại
- Từ phiên bản 4. 3. 0, có thể
Trả về số lượng quan hệ với
1
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
Truy vấn sau bao gồm số lượng bài đăng của mỗi người dùng trong kết quả
2
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Hiển thị kết quả CLI
Trả về số lượng quan hệ với
9
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
Truy vấn sau đây sử dụng
9 để trả về số lượng bài đăng của mỗi người dùng và không có trường nào khác
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
4
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Hiển thị kết quả CLI
Trả về nhiều số lượng quan hệ
Truy vấn sau đây trả về số lượng
9 và
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
00 của mỗi người dùng và không có trường nào khác
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
5
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Hiển thị kết quả CLI
Lọc số lượng quan hệ
Tính năng này có sẵn từ phiên bản 4. 3. 0. Để sử dụng nó, bạn cần thêm
01
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
6
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Sử dụng
8 để lọc các trường được trả về bởi loại đầu ra
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
_sum: {
profileViews: true,
},
}]
8. Bạn có thể làm điều này trên và các trường của một
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
Ví dụ: truy vấn sau trả về tất cả các bài đăng của người dùng có tiêu đề "Xin chào. "
7
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Truy vấn sau tìm tất cả các bài đăng của người dùng có nhận xét từ tác giả có tên "Alice"
8
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Đếm các giá trị trường không phải ______3_______4
Trong 2. 15. 0 trở lên, bạn có thể đếm tất cả các bản ghi cũng như tất cả các trường hợp có giá trị trường không phải ______3_______4. Truy vấn sau đây trả về số lượng
- Tất cả bản ghi
06 [
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
07]
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
- Tất cả các giá trị không phải ______3_______4
09 [không phải các giá trị khác biệt, chỉ các giá trị không phải là ______3_______4]
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
9
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
Hiển thị kết quả CLI
số lượng đã lọc
5 hỗ trợ lọc. Truy vấn mẫu sau đây đếm tất cả người dùng có hơn 100 lượt xem hồ sơ
{
_avg: {
age: null
},
_count: {
age: 9
}
}
0
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
_count: {
age: true,
},
}]
Truy vấn ví dụ sau đếm bài đăng của một người dùng cụ thể
1
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
_count: {
age: true,
},
}]
Chọn khác biệt
Prisma Client cho phép bạn lọc các hàng trùng lặp từ phản hồi Truy vấn Prisma thành truy vấn bằng cách sử dụng.
0 thường được sử dụng kết hợp với để xác định các kết hợp giá trị duy nhất nhất định trong các hàng trong bảng của bạn
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
Ví dụ sau đây trả về tất cả các trường cho tất cả các bản ghi
06 với các giá trị trường
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
09 riêng biệt
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
2
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
_count: {
age: true,
},
}]
Ví dụ sau đây trả về các giá trị trường
18 riêng biệt [ví dụ:
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
19 và
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
20]
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
3
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
_count: {
age: true,
},
}]
Hiển thị kết quả CLI
khác biệt dưới mui xe
Tùy chọn
0 của Prisma không sử dụng SQL
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
22. Thay vào đó,
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
0 sử dụng
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
- Một truy vấn
24
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
- Xử lý hậu kỳ trong bộ nhớ để chọn riêng biệt
Nó được thiết kế theo cách này để hỗ trợ
9 và
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
1 như một phần của truy vấn
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
0
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
country: {
not: 'Sweden',
},
},
_sum: {
profileViews: true,
},
having: {
country: {
not: 'Ghana',
},
profileViews: {
_min: {
gte: 10,
},
},
},
}]
Ví dụ sau đây chọn khác biệt trên
28 và
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
29, được sắp xếp theo thứ tự của
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
30, để trả về điểm số cao nhất của mỗi người chơi trong mỗi trò chơi. Truy vấn sử dụng
const aggregations = await prisma.user.aggregate[{
_avg: {
age: true,
},
where: {
email: {
contains: 'prisma.io',
},
},
orderBy: {
age: 'asc',
},
take: 10,
}]
console.log['Average age:' + aggregations._avg.age]
1 và
const groupBy = await prisma.user.groupBy[{
by: ['city'],
_count: {
city: true,
},
orderBy: {
_count: {
city: 'desc',
},
},
}]
9 để bao gồm dữ liệu bổ sung
const groupUsers = await prisma.user.groupBy[{
by: ['country'],
where: {
email: {
contains: 'prisma.io',
},
},
_sum: {
profileViews: true,
},
having: {
profileViews: {
_avg: {
gt: 100,
},
},
},
}]
Làm cách nào để sử dụng nhóm cho nhiều trường trong MongoDB?
Ví dụ 3. Nhóm BUCKET MongoDb theo nhiều trường . Bucket tổng hợp là quá trình phân loại các tài liệu thành các nhóm. Nhóm này hoạt động như những cái xô. Mỗi văn bản được phân chia tùy theo cách diễn đạt cụ thể. creating the bucket aggregation. Bucket aggregation is the process of categorizing the documents into groups. This group acts like buckets. Each document is divided depending on the specific expression.Nhóm hoạt động như thế nào trong MongoDB?
MongoDB group by được dùng để nhóm dữ liệu từ bộ sưu tập , chúng ta có thể đạt được nhóm theo mệnh đề bằng hàm tổng hợp và phương thức nhóm trong MongoDB. Mặc dù sử dụng hàm tổng hợp với các hoạt động truy vấn nhóm theo mệnh đề nhanh hơn như truy vấn thông thường, nhưng về cơ bản, hàm tổng hợp được sử dụng trong nhiều điều kiện.Nhóm có sử dụng chỉ mục MongoDB không?
$group không sử dụng dữ liệu chỉ mục . Từ tài liệu mongoDB. Các nhà khai thác đường ống $match và $sort có thể tận dụng lợi thế của một chỉ mục khi chúng xuất hiện ở đầu đường ống. Toán tử đường ống $geoNear tận dụng chỉ mục không gian địa lý.Phương thức tổng hợp nào được MongoDB ưa thích sử dụng?
Đường dẫn cung cấp khả năng tổng hợp dữ liệu hiệu quả bằng cách sử dụng các thao tác gốc trong MongoDB và là phương pháp ưa thích để tổng hợp dữ liệu trong MongoDB. Đường dẫn tổng hợp có thể hoạt động trên một bộ sưu tập được phân đoạn.