Mysql 选择内部联接上的最小值
我在选择最小值时遇到一些问题。我创建了带有2个表的内部联接,并在SQL查询中进行了简单的计算。现在我想从计算中选择最小值。这是我的问题Mysql 选择内部联接上的最小值,mysql,sqlsrv,Mysql,Sqlsrv,我在选择最小值时遇到一些问题。我创建了带有2个表的内部联接,并在SQL查询中进行了简单的计算。现在我想从计算中选择最小值。这是我的问题 $sql = "SELECT jobmatl_mst.item as item2,jobmatl_mst.u_m, job_mst.item, jobmatl_mst.job, jobmatl_mst.item as item2, jobmatl_mst.description, jobmatl_mst.matl_qty_conv , itemwhse_mst
$sql = "SELECT jobmatl_mst.item as item2,jobmatl_mst.u_m, job_mst.item, jobmatl_mst.job, jobmatl_mst.item as item2, jobmatl_mst.description, jobmatl_mst.matl_qty_conv , itemwhse_mst.item as whseitem,itemwhse_mst.qty_on_hand, itemwhse_mst.qty_on_hand / jobmatl_mst.matl_qty_conv as total
FROM job_mst
INNER JOIN jobmatl_mst ON job_mst.job=jobmatl_mst.job
INNER JOIN itemwhse_mst ON jobmatl_mst.item=itemwhse_mst.item
WHERE job_mst.item ='601010944003' AND job_mst.type='S'
ORDER BY total";
我想找到“total”的最小值。更新:以下解决方案是特定于MySQL的。
最简单的答案是,在查询结束时使用
orderbytotal LIMIT 1
,这与您自己的代码非常接近
$sql = "
SELECT
jobmatl_mst.item as item2,
jobmatl_mst.u_m,
job_mst.item,
jobmatl_mst.job,
jobmatl_mst.item as item2,
jobmatl_mst.description,
jobmatl_mst.matl_qty_conv ,
itemwhse_mst.item as whseitem,
itemwhse_mst.qty_on_hand,
itemwhse_mst.qty_on_hand / jobmatl_mst.matl_qty_conv as total
FROM job_mst
INNER JOIN jobmatl_mst
ON job_mst.job=jobmatl_mst.job
INNER JOIN itemwhse_mst
ON jobmatl_mst.item=itemwhse_mst.item
WHERE
job_mst.item ='601010944003' AND
job_mst.type='S'
ORDER BY total # Sort the result in a
# way that lowest is first and highest is last
LIMIT 1 # Then we need the first value
";
也可以使用聚合函数MIN()
和分组方式:
$sql = "
SELECT
jobmatl_mst.item as item2,
jobmatl_mst.u_m,
job_mst.item,
jobmatl_mst.job,
jobmatl_mst.item as item2,
jobmatl_mst.description,
jobmatl_mst.matl_qty_conv ,
itemwhse_mst.item as whseitem,
itemwhse_mst.qty_on_hand,
MIN(itemwhse_mst.qty_on_hand / jobmatl_mst.matl_qty_conv) as min_total
FROM job_mst
INNER JOIN jobmatl_mst
ON job_mst.job=jobmatl_mst.job
INNER JOIN itemwhse_mst
ON jobmatl_mst.item=itemwhse_mst.item
WHERE
job_mst.item ='601010944003' AND
job_mst.type='S'
GROUP BY
jobmatl_mst.item as item2,
jobmatl_mst.u_m,
job_mst.item,
jobmatl_mst.job,
jobmatl_mst.item as item2,
jobmatl_mst.description,
jobmatl_mst.matl_qty_conv ,
itemwhse_mst.item as whseitem,
itemwhse_mst.qty_on_hand
";
请注意,在这种情况下,除了具有聚合函数的列之外,所有列都位于GROUP BY
子句中。只需在order BY
之后添加limit 1
。您需要查看@GordonLinoff。。对不起,先生,我可以在哪里设置限制1?我仍然是SQL语句的业余爱好者这里有些不对劲。我尝试在SQL server中使用LIMIT1。。有些事情没有接近极限。。。但是我尝试了聚合函数MIN(),查询是可以的。@MuhammadYusufAhmadShahRudd对不起,上面的查询是针对MySQL的,不是针对SQL的Server@MuhammadYusufAhmadShahRudd在这种情况下,SQL Server等价于LIMIT
的是TOP
,它在SELECT
之后使用,例如:selecttop1somevalue…