我有一个table_1:
id custno
1 1
2 2
3 3
和table_2:
id custno qty
1 1 10
2 1 7
3 2 4
4 3 7
5 1 5
6 1 5
当我运行此查询以显示每个客户的最小订单数量时:
SELECT table_1.custno,table_2.qty
FROM table_1 LEFT OUTER JOIN table_2 ON table_1.custno = table_2.custno AND
qty = (SELECT MIN(qty) FROM table_2 WHERE table_2.custno = table_1.custno )
然后我得到了这个结果:
custno qty
1 5
1 5
2 4
3 7
如何获得每qty
个custno
的最小值?
我怎么能这样做?
THX!
答案 0 :(得分:5)
您的意思是聚合(GROUP BY
):
SELECT table_1.custno,MIN(table_2.qty) AS [min_val]
FROM table_1
LEFT OUTER JOIN table_2 ON table_1.custno = table_2.custno
GROUP BY table_1.custno
答案 1 :(得分:2)
SELECT table_2.custno, MIN(qty) as qty, descr
FROM table_2
LEFT OUTER JOIN table_1
on table_2.custno = table_1.custno
GROUP BY table_2.custno, table_2.descr
ORDER BY table_2.custno
注意:上面table_1的链接仅包含在假设中,您要么(1)使用表2中的JOIN 选择行 - 换句话说,table_2在table_1中有一些不存在的常规 - 或者(2)对于descr列的不同值,qty列有不同的值(仅在列中提到的列)你的评论,关于后来被删除的另一个答案)。
但如果两个表具有相同的custnos,并且一个descr的min(qty)与另一个的min(qty)相同,那么JOIN是不必要的:
SELECT custno, MIN(qty) as qty, descr
FROM table_2
GROUP BY custno, descr
ORDER BY custno
但是,如果不同的descr列值有不同的MIN(qty)值,并且您希望看到 all descr值,但只有一个MIN(qty),(MIN(qty)为所有)...那么你必须要有创意...就像加入两次所以列可以独立变化
这是Yosi的答案的变体,可以处理:
SELECT table_1.custno, MIN(T2A.qty) AS [min_val], T2B.descr
FROM table_1
LEFT OUTER JOIN table_2 T2A ON table_1.custno = T2A.custno
LEFT OUTER JOIN table_2 T2B ON table_1.custno = T2B.custno
GROUP BY table_1.custno, T2B.descr
ORDER BY table_1.custno