2009-06-28 7 views
1

나는이 SQL 있습니다mySQL의 총 컬럼 수!

SELECT * , (
xnum * xprice 
) AS amount, SUM(xnum * xprice) AS total 
FROM xxbasket 
LEFT JOIN xxsubproduct 
USING (xsubproduct_id) 
LEFT JOIN xxcolor 
USING (xcolor_id) 
WHERE xuserid = '3' 

내가 사용 SUM (xnum * xprice) 나에게 하나 개의 행을 제공합니다 그것의 총 AS를,하지만 난이 SUM (xnum * xprice)를 제거 할 때 그것은 나에게 모든 행을 줄입니다

제 질문은 어떻게 합계를 얻을 수 있습니까? 쿼리에서 모든 행이 필요합니까?!

+1

하나의 쿼리로 두 가지 작업을 수행하는 것처럼 완전히 명확하지는 않습니다. 두 개의 쿼리로 제동하거나 두 개의 하위 쿼리를 작성한 다음 JOIN을 수행하십시오. – mfloryan

+0

@mfx 하위 쿼리를 만드는 방법을 모르겠다. 하위 쿼리를 작성하고 함께 참여하는 방법을 설명해주십시오. – mehdi

+0

OK,이 SELECT * 추천 서브 쿼리, 침입 ( xnum * xprice ) xxbasket FROM 양 컬러 xxcolor.xcode AS, AS xxsubproduct.xcode 제품 코드 ( SELECT SUM (xnum * xprice) AS xxbasket 로부터 총 AS xuserid = '3' 는) 왼쪽 (xsubproduct_id) LEFT가 사용 xxcolor 가입하세요 사용 xxsubproduct 가입 (xcolor_id) WHERE xuserid = '3'지금 일하고 있지만 숫자는 무관! – mehdi

답변

2

합계는 선택한 모든 행에 대한 값 (xnum * xprice)의 합계가 계산되는 함수입니다. 결과는 한 행입니다.

여러 행 그룹의 합계를 계산하려면 그룹에 열을 그룹화하는 GROUP BY 절을 사용할 수 있습니다 (예 : where 절 대신 GROUP BY userid가 모든 항목에 대해 SUM (xnum * xprice)을 계산 함) 사용자)

0

SUM() 함수는 집계 연산자입니다. 연결된 select는 더 이상 개별 행을 반환 할 수 없으며 행 그룹에 대한 정보 만 반환합니다.

하지만 서브 쿼리에서 합계를 반환 할 수 있습니다. 다음은 xprice 열이 xxsubproduct 테이블에 있다고 가정 할 때의 예입니다.

SELECT *, 
    xnum * xprice AS amount, 
    ( select sum(xnum * xprice) 
     FROM xxbasket 
     LEFT JOIN xxsubproduct USING xsubproduct_id 
     WHERE xuserid = '3' 
    ) as total 
FROM xxbasket 
LEFT JOIN xxsubproduct USING xsubproduct_id 
LEFT JOIN xxcolor USING xcolor_id 
WHERE xuserid = '3'