2016-12-19 2 views
2

나는 두 개의 테이블이 :이 쿼리를 사용하고SUM 가입 쿼리

Table products 
ID Name   Base  
1  Product_1 5 
2  Product_2 4 

Table orders 
ID Product_ID  
1  1    
2  1   
3  2 

을 :

SELECT products.ID, products.Base, COUNT(orders.ID) AS Counter 
FROM products 
LEFT JOIN orders ON products.ID = orders.Product_ID 
GROUP BY products.ID 

는 얻을 :

ID Base Counter 
1  5  2 
2  4  1 

을 지금 수행 할 작업 위와 같은 테이블을 반환 할 쿼리를 작성하지만 추가 열 SUM - 기본 카운터와 카운터의 합계 :

ID Base Counter SUM 
1  5  2   7 
2  4  1   5 

단일 쿼리를 사용하여이 결과를 얻을 수 있습니까? SUM 열로 결과를 주문하고 싶습니다.

+1

products.base가 숫자이고'GROUP BY '다음에'ORDER BY Sum'이라고 가정하면'As counter' 다음에'products.Base + COUNT (orders.ID)를 Sum으로 추가하십시오. – xQbert

+0

@xQbert 고마워, 정확히 내가 필요한거야! – bloo79

답변

3

지나치게 생각하지 마십시오. 플러스 기호로 함께 추가하십시오.

SELECT products.ID, products.Base, COUNT(orders.ID) AS Counter, 
products.Base + COUNT(orders.ID) as `SUM` 
FROM products 
LEFT JOIN orders ON products.ID = orders.Product_ID 
GROUP BY products.ID 
ORDER BY `SUM` 

참고 : "SUM"은 열 별칭으로 사용하기 위해 역 따옴표에서 그것을 둘러싸해야합니다 있도록 집계 SQL 함수의 이름입니다. 다른 이름을 사용하십시오.

1
SELECT products.ID, products.Base, COUNT(orders.ID) AS Counter, products.Base + COUNT(orders.ID) as `sum` 
FROM products 
LEFT JOIN orders ON products.ID = orders.Product_ID 
GROUP BY products.ID, products.Base 
ORDER BY `sum` DESC 

group by 절에 항상 모든 비 집합 열을 포함하십시오. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

참고 자료에서 볼 수 있듯이 MySQL은 편안한 쿼리 구문을 허용하는 그룹화 기준 외의 표준 확장 기능을 제공합니다. 그러나 결과는 MySQL이 그룹화를 달성하기 위해 임의적으로 선택하는 것에 의존합니다. 또한 SQL 구문 규칙을 따르는 경우 ONLY_FULL_GROUP_BY 설정이 변경되면 그룹화되지 않은 모든 열을 group by 절에 포함하면 쿼리가 유효하게 유지됩니다.

+1

일반적으로 products.Id는 주문 및 샘플 데이터에 대한 조인을 기반으로하는 기본 키인 것처럼 보이지만 products.base는 1 개의 값만 가질 수 있습니다. 따라서이 경우 mySQL의 그룹은 확장에 의해 중요하지 않습니다. 선택할 수있는 값은 항상 1 개뿐이므로 그러나 이것은 ID가 기본 키임을 전제로합니다. 귀하의 링크 당 "서버는 각 그룹에서 임의의 값을 자유롭게 선택할 수 있으므로 동일하지 않으면 선택된 값이 불확실합니다."1 값을 선택하면 1을 선택해야하므로 항상 올바른 값이됩니다 . 그래서이 경우에는 그룹화가 더 빠를 수도 있습니다. – xQbert

+0

기본 키가 있더라도 설정 값이 변경되면 쿼리가 실패 할 수 있습니다. 그래서 저는 항상이 주제에 대해 좋은 충고라고 믿습니다. –