문제

이것이 정말로 기본이라면 죄송하지만 :

나는 어느 시점 에서이 문제가 없었고 지금은 전적으로 다른 일을하고 있거나 구문이 한 단계를 건너 뛰었습니다.

예를 들어, 해당 열 중 하나의 총 하나의 다른 열과 함께 특정 데이터가있는 모든 행을 반환 해야하는 쿼리가 있습니다. 예상대로 일이 효과가 있다면 다음과 같습니다.

 SELECT
 order_id,
 cost,
 part_id,
 SUM(cost) AS total
 FROM orders 
 WHERE order_date BETWEEN xxx AND yyy

그리고 나는 순서로 모든 행을 얻을 것입니다. 나는 총계가 매번 동일하다는 것을 알고 있지만 그것은 예상됩니다. 지금 그것을 사용하기 위해 지금 사용하고 있습니다.

 SELECT
 order_id,
 cost,
 part_id,
 (SELECT SUM(cost)
 FROM orders
 WHERE order_date BETWEEN xxx AND yyy) AS total
 FROM orders 
 WHERE order_date BETWEEN xxx AND yyy

기본적으로 다른 데이터에 대해 총 1 회 동일한 쿼리를 한 번, 한 번에 두 번 실행합니다. 하지만 제가 합계를 원한다면, 평균 비용을 원한다면 평균 비용을 3 번 똑같은 쿼리를 할 것입니다. 실수.

모든 도움은 정말 감사합니다.

도움이 되었습니까?

해결책

사용해야합니다 GROUP BY 원하는 결과를 얻기 위해 :

SELECT
order_id,
part_id,
SUM(cost) AS total
FROM orders 
WHERE order_date BETWEEN xxx AND yyy
GROUP BY order_id, part_id

이것은 당신의 결과를 그룹화합니다. 내가 그것을 가정하기 때문에 주목하십시오 order_id 그리고 part_id 복합 PK입니다. SUM(cost) 위의 일은 아마도있을 것입니다 = cost (고유 한 두 분야의 조합으로 그룹화하기 때문에 아래의 상관 관계 하위 쿼리는이 제한을 극복 할 것입니다).

비 응집 적 행이 가져온 모든 행은 GROUP BY 열.

자세한 내용은 GROUP BY 여기:

MySQL 튜토리얼 - 그룹 by


편집하다: 열을 집계 및 응집료로 모두 사용하려는 경우 그룹을 분리 해야하는 경우 하위 쿼리를 사용해야합니다.

SELECT
or1.order_id,
or1.cost,
or1.part_id,
(
  SELECT SUM(cost)
  FROM orders or2
  WHERE or1.order_id = or2.order_id
  GROUP BY or2.order_id
) AS total
FROM orders or1
WHERE or1.order_date BETWEEN xxx AND yyy
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top