2012-03-08 52 views
4

这是我的计划表SQL MIN功能的where子句

Project Table 
JNo Name City 
J1 Proj1 London 
J2 Proj2 Paris 
J3 Proj3 Athens 
J4 Proj4 India 

这是我的货台

Shipment 
SNo PNo JNo Qty 
S1 P1 J1 50 
S1 P1 J2 90 
S1 P2 J1 40 
S1 P3 J3 20 
S2 P1 J3 110 
S2 P2 J2 30 
S2 P4 J3 10 
S2 P3 J1 100 
S3 P1 J3 80 
S3 P4 J2 70 
S3 P4 J2 70 
S4 P1 J3 20 
S4 P2 J1 60 

我想有提供最小数量的项目的名称。

我试过了。但它的回报仅仅是最低数量值 这是我的代码

select min(qty) from shipment where jno IN(select jno from project) 

回答

5
select p.name from Project p, Shipment s where s.JNo=p.JNo and s.Qty in (select min(qty) from shipment) 
+0

谢谢你。它的工作。并感谢所有的人:) – Mifas 2012-03-08 12:37:06

+0

不客气。请客气,并提供答案:-) – Andreas 2012-03-08 14:38:22

3

这应该工作就像你说的

select p.Name, s.Qty 
from Project p, Shipment s 
where p.Jno=s.Jno 
and s.Qty in(select min(s.Qty) from Shipment s); 

将从Project表和最低数量从shipment表显示,项目名称。

3

不使用MIN:

 

    SELECT p.Name, s.Qty 
    FROM `project` p 
    INNER JOIN `shipment` s ON `p`.`jno` = `s`.`jno` 
    ORDER BY `s`.`qty` ASC 
    LIMIT 1 
 
1

查询,你应该用的是

SELECT project.Name, min(qty) FROM Project 
LEFT JOIN Shipment ON project.JNO = Shipment.JNO 

我希望这可以帮助你。

+2

这将返回每个项目的最小金额,而不是具有最小数量的项目。 – 2012-03-08 12:29:26

+0

@ MarkBannister:是的,我同意。这将需要作为您的第一个查询ORDER BY shipment.qty限制1。 – 2012-03-08 12:41:10

0

对于跟单货最小的项目,请尝试:

select p.name 
from project p 
join shipment s on p.jno=s.jno 
order by s.qty 
limit 1 

对于发货最小总量的项目,请尝试:

select name from 
(select p.name, sum(s.qty) total_shipped 
from project p 
join shipment s on p.jno=s.jno 
group by p.name 
order by 2) sq 
limit 1