2014-04-26 3 views
0

여기에 조인 된 테이블이 3 개 있습니다. 고객이 주문한 고객, 주문 및 품목이 있습니다. 이러한 이름은 CustomersTbl, OrdersTbl, OrderedItemTbl입니다.MySql : 조인 된 테이블의 MAX 값 반환

나는 모든 주문을 총 가격으로 정렬하고 주문 이름을 작성한 고객을 표시합니다.

select * from productstbl; 
select * from ordereditemtbl; 
select * from orderstbl; 

select 
    ordereditemtbl.ItemID, 
    customerstbl.CustomerID, 
    customerstbl.FirstName, 
    orderstbl.OrderID, 
    orderstbl.OrderDate, 
    sum(ordereditemtbl.amount * productstbl.Price) as totalPrice 
from 
    ordereditemtbl 
     inner join 
    ProductsTbl ON ordereditemtbl.productID = productstbl.productID 
     inner join 
    orderstbl ON ordereditemtbl.orderID = ordereditemtbl.orderID 
     inner join 
    customerstbl ON customerstbl.customerID = orderstbl.customerID#'2' 
group by ordereditemTbl.OrderID 
order by totalPrice desc; 

이제 가장 높은 TotalPrice가있는 주문을 표시하고 싶습니다. 어떻게 그것의 최대 가치를 얻을 수 있습니까? MAX() 함수를 사용할 수 있습니까?

+2

'MAX (totalPrice)에 의한 주문' – underscore

+0

Nope. 슬프게도 다음과 같은 메시지가 표시됩니다. '오류 1247 : totalPrice 참조가 지원되지 않습니다.' 나는 totalPrice의 값을 넣음으로써 그것을 고치려고했다 : sum (ordereditemtbl.amount * productstbl.Price). 오류 1111 : '그룹 기능을 잘못 사용했습니다.' – Villager

+2

'... by order by totalPrice desc LIMIT 1' [docs] (https://dev.mysql.com/doc/refman/5.0/en/select.html)를 참조하십시오. 또한'orderstbl ON ordereditemtbl.orderID = ordereditemtbl.orderID' 줄에 오류가 있음을 유의하십시오. 'orderstbl ON ordereditemtbl.orderID = erderstbl.orderID'를 뜻하는 것 같습니다. – abl

답변

1

보겠습니다. 이 작동하는지 확인하십시오 :

SELECT * FROM 
(
select 
    ordereditemtbl.ItemID, 
    customerstbl.CustomerID, 
    customerstbl.FirstName, 
    orderstbl.OrderID, 
    orderstbl.OrderDate, 
    sum(ordereditemtbl.amount * productstbl.Price) as totalPrice, 
    @rownum AS row_number 
from 
    ordereditemtbl 
     inner join 
    ProductsTbl ON ordereditemtbl.productID = productstbl.productID 
     inner join 
    orderstbl ON ordereditemtbl.orderID = ordereditemtbl.orderID 
     inner join 
    customerstbl ON customerstbl.customerID = orderstbl.customerID#'2' 
     inner join 
    (SELECT @rownum := 0) dummy 
group by ordereditemTbl.OrderID 
ORDER BY totalPrice desc; 
) 
WHERE row_number=0 

이렇게하면 행 번호가 할당되고 맨 위 행이 선택됩니다. 이 내림차순으로 표시됩니다으로,

order by totalPrice desc LIMIT 1; 

테이블의 첫 번째 행이 만든 쇼 :

건배, 램 ABL에 의해 제안

+0

글쎄, 우리는 각 테이블의 별칭을 놓치고있다.하지만 내가 0 행을 반환했다고 덧붙였다. – Villager

+0

별칭을 추가했음을 이해하지 못하고 _your_ 검색어를 복사 했습니까? –

+1

저는 SQL에서 초보자입니다. 실수를 통해서만 이런 것들을 배우고 있습니다. – Villager

0

, 나는 코드의 끝에 다음을 추가 한 값. 감사합니다.

관련 문제