带有 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()(以避免子查询)

在 WHERE 子句中使用函数编写 SQL SELECT 语句是不是有 Django 等效项?

带有 WHERE 子句的 SQL COUNT

带有 where 子句的 SQL Lag()

在 SQL 中计算带有 where 子句的字段

如何使用带有复合 WHERE 子句的 DataGrip SQL 格式化程序