2012-09-05 3 views
4

에 의한 내부 그룹 별 순서는이 같은 MySQL의 테이블이 있습니다MySQL의 :

mysql> select * from pt_onhand where pn = '000A569011'; 
+------------+-----+----+--------+------------+---------+--------------+-----+ 
| pn   | pa | mn | ACTIVE | locate  | onhand | avg_cost  | whs | 
+------------+-----+----+--------+------------+---------+--------------+-----+ 
| 000A569011 | P/A | |  | AA-112  | 13.0000 | 0.0000000000|  | 
| 000A569011 | P/A | |  | PF120136.1 | 1.0000 | 5.4785156200 |  | 
+------------+-----+----+--------+------------+---------+--------------+-----+ 

와 나는이 같은 쿼리를 실행하려면 :

mysql> select sum(onhand),max(locate),avg_cost from pt_onhand where pn = '000A569011' group by pn; 
+-------------+-------------+--------------+ 
| sum(onhand) | max(locate) | avg_cost  | 
+-------------+-------------+--------------+ 
|  14.0000 | PF120136.1 | 0.0000000000| 
+-------------+-------------+--------------+ 

그래서 내 질문이입니다 : 수 내가 avg_cost 5.4785156200 최대 (관련) PF120136.1 같은 쿼리에서, 어떻게 관련이? 감사

+0

추가 내부 쿼리를 작성해야합니다. 그럼에도 불구하고 실망 스럽다. 이것은 sqlite에서 예상대로 작동하며 다른 dbms에서도 컴파일되지 않을 수 있습니다. 이런 이유로 나는 mysql을 좋아하지 않는다. – nawfal

답변

7

이 조금 산만하지만 그것은 트릭 수행해야합니다

select a.onhand, a.locate, p.avg_cost 
from 
    (select sum(onhand) onhand, max(locate) locate from pt_onhand where pn = '000A569011' group by pn) a 
    join pt_onhand p on p.locate = a.locate 
3

또한 같은 서브 쿼리를 할 수있는 :

select 
    sum(onhand) 
    ,max(locate) 
    ,(select avg_cost from pt_onhand where pn = pt.pn and locate = max(pt.locate)) as avg_cost 
from 
    pt_onhand pt 
where 
    pn = '000A569011' 
group by pn; 

을하지만에 따라 잘 작동하지 않을 수 있습니다 DB가 얼마나 큰지, 모든 것을 시험해보고 어떤 것이 가장 잘 작동하는지 확인하십시오.