带有 where 子句的 SQL MIN 函数
Posted
技术标签:
【中文标题】带有 where 子句的 SQL MIN 函数【英文标题】:SQL MIN Function with where clause 【发布时间】:2012-03-25 22:10:18 【问题描述】:这是我的项目表
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)
【问题讨论】:
【参考方案1】:SELECT p.name
FROM Project p, Shipment s
WHERE s.JNo = p.JNo
AND s.Qty in (SELECT MIN(qty) FROM shipment)
【讨论】:
【参考方案2】:对于单个出货量最小的项目,试试:
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
【讨论】:
【参考方案3】:您应该使用的查询是
SELECT project.Name, min(qty) FROM Project
LEFT JOIN Shipment ON project.JNO = Shipment.JNO
希望对你有帮助。
【讨论】:
这将返回每个项目的最小数量,而不是数量最小的项目。 @MarkBannister:是的,我同意。作为您的第一个查询,它将需要 ORDER BY shipping.qty 限制 1。【参考方案4】:不使用 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
【讨论】:
【参考方案5】:这应该像你说的那样工作
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
表中的最小数量。
【讨论】:
以上是关于带有 where 子句的 SQL MIN 函数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Hive/SQL 的 where/have 子句中使用 min()(以避免子查询)