문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ /

SQL-애그리게이션 매핑 차트

이 페이지의 내용

  • 예제

집계 파이프라인 을 통해 MongoDB는 SQL의 여러 일반적인 데이터 애그리게이션 작업에 해당하는 네이티브 애그리게이션 기능을 제공할 수 있습니다.

다음 표에는 일반적인 SQL 애그리게이션 용어, 함수 및 개념과 해당 MongoDB 애그리게이션 연산자에 관한 개요가 제시되어 있습니다.

SQL 용어, 함수 및 개념
MongoDB 애그리게이션 연산자
위치
그룹 기준
보유
SELECT
주문 기준
LIMIT
SUM()
COUNT()
가입
NEW_TABLE로 선택
테이블로 병합
모두 통합

전체 애그리게이션 파이프라인 및 표현식 연산자 목록은 다음에서 확인하세요.

다음도 참조하세요.

다음 표에는 SQL 애그리게이션 문과 해당 MongoDB 문에 관한 간략한 참고 자료가 제시되어 있습니다. 표의 예제에서는 다음 조건을 가정합니다.

  • SQL 예제에서는 order_lineitem.order_idorders.id 열로 결합되는 두 개의 테이블, ordersorder_lineitem이 적용되어 있다고 가정합니다.

  • MongoDB 예제에서는 다음 프로토타입의 문서를 포함하는 한 개의 컬렉션 orders가 적용되어 있다고 가정합니다.

    {
    cust_id: "abc123",
    ord_date: ISODate("2012-11-02T17:04:11.102Z"),
    status: 'A',
    price: 50,
    items: [ { sku: "xxx", qty: 25, price: 1 },
    { sku: "yyy", qty: 25, price: 1 } ]
    }
SQL 예제
MongoDB 예제
설명
SELECT COUNT(*) AS count
FROM orders
db.orders.aggregate( [
{
$group: {
_id: null,
count: { $sum: 1 }
}
}
] )
다음의 모든 기록을 계산: orders
SELECT SUM(price) AS total
FROM orders
db.orders.aggregate( [
{
$group: {
_id: null,
total: { $sum: "$price" }
}
}
] )
ordersprice 필드를 합산
SELECT cust_id,
SUM(price) AS total
FROM orders
GROUP BY cust_id
db.orders.aggregate( [
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
}
] )
각 고유의 cust_id에 대해 price 필드를 합산
SELECT cust_id,
SUM(price) AS total
FROM orders
GROUP BY cust_id
ORDER BY total
db.orders.aggregate( [
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
},
{ $sort: { total: 1 } }
] )
각 고유의 cust_id에 대해 price 필드를 합산(결과는 합계 순으로 정렬)
SELECT cust_id,
ord_date,
SUM(price) AS total
FROM orders
GROUP BY cust_id,
ord_date
db.orders.aggregate( [
{
$group: {
_id: {
cust_id: "$cust_id",
ord_date: { $dateToString: {
format: "%Y-%m-%d",
date: "$ord_date"
}}
},
total: { $sum: "$price" }
}
}
] )
ord_date 그룹의 각 고유의 cust_id에 대해 price 필드를 합산, 날짜의 시간 부분은 제외
SELECT cust_id,
count(*)
FROM orders
GROUP BY cust_id
HAVING count(*) > 1
db.orders.aggregate( [
{
$group: {
_id: "$cust_id",
count: { $sum: 1 }
}
},
{ $match: { count: { $gt: 1 } } }
] )
복수의 기록이 있는 cust_id의 경우, cust_id와 해당 기록 수를 반환
SELECT cust_id,
ord_date,
SUM(price) AS total
FROM orders
GROUP BY cust_id,
ord_date
HAVING total > 250
db.orders.aggregate( [
{
$group: {
_id: {
cust_id: "$cust_id",
ord_date: { $dateToString: {
format: "%Y-%m-%d",
date: "$ord_date"
}}
},
total: { $sum: "$price" }
}
},
{ $match: { total: { $gt: 250 } } }
] )
ord_date 그룹의 각 고유의 cust_id에 대해 price 필드를 합산한 다음 합계가 250을 초과하는 경우에만 반환, 날짜의 시간 부분은 제외
SELECT cust_id,
SUM(price) as total
FROM orders
WHERE status = 'A'
GROUP BY cust_id
db.orders.aggregate( [
{ $match: { status: 'A' } },
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
}
] )
상태가 A인 각 고유의 cust_id에 대해 A 필드를 합산
SELECT cust_id,
SUM(price) as total
FROM orders
WHERE status = 'A'
GROUP BY cust_id
HAVING total > 250
db.orders.aggregate( [
{ $match: { status: 'A' } },
{
$group: {
_id: "$cust_id",
total: { $sum: "$price" }
}
},
{ $match: { total: { $gt: 250 } } }
] )
상태가 A인 각 고유의 cust_id에 대해 price 필드를 합산한 다음 합계가 250을 초과하는 경우에만 반환
SELECT cust_id,
SUM(li.qty) as qty
FROM orders o,
order_lineitem li
WHERE li.order_id = o.id
GROUP BY cust_id
db.orders.aggregate( [
{ $unwind: "$items" },
{
$group: {
_id: "$cust_id",
qty: { $sum: "$items.qty" }
}
}
] )
각 고유의 cust_id에 대해, 주문과 관련된 해당 항목 qty 필드를 합산
SELECT COUNT(*)
FROM (SELECT cust_id,
ord_date
FROM orders
GROUP BY cust_id,
ord_date)
as DerivedTable
db.orders.aggregate( [
{
$group: {
_id: {
cust_id: "$cust_id",
ord_date: { $dateToString: {
format: "%Y-%m-%d",
date: "$ord_date"
}}
}
}
},
{
$group: {
_id: null,
count: { $sum: 1 }
}
}
] )
ord_date 그룹의 고유한 cust_id의 수를 계산, 날짜의 시간 부분은 제외

돌아가기

변수

다음

맵 축소

이 페이지의 내용