【问题标题】:left join of with without duplicate records only showing 1 minimum value没有重复记录的左连接仅显示 1 个最小值
【发布时间】:2013-11-23 19:33:58
【问题描述】:

我有一张桌子_1:

id  custno
1   1
2   2
3   3

还有一张桌子_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

如何获得每个custno 的最小值qty

我该怎么做?

谢谢!

【问题讨论】:

  • 我没有看到客户 1 两次。我看到客户 4,它甚至不存在。
  • 您要选择所有最小数量的客户吗?
  • 使用GROUP BY custno,那么你只需要table_2。 SELECT custno, MIN(qty) as Min_Qty FROM table_2 WHERE table_2.custno = table_1.custno GROUP BY custno
  • left join without duplicate values using MIN() 的重复项 -- 请编辑您的问题,而不是发布重复项。
  • 读者注意... 原发帖人继续关于此查询的问题,在此帖子:stackoverflow.com/questions/19916298/…

标签: sql join duplicates


【解决方案1】:

你的意思是聚合(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

【讨论】:

  • Yosi 的 GROUP BY 解决方案出现在我之前,所以我会支持他的 :)
【解决方案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) 使用 JOIN 来 select table_2 中的行 --换句话说,table_2 有一些 不存在 在 table_1 中的 custnos - 或者 (2) 对于您的 descr 列的不同值(仅在您对另一个后来被删除的答案的评论)。

但是如果两个表的custnos相同,并且一个descr的min(qty)与另一个descr的min(qty)相同,则不需要JOIN:

SELECT custno, MIN(qty) as qty, descr
FROM table_2   
GROUP BY custno, descr
ORDER BY custno


但是,如果不同的 descr 列值有不同的 MIN(qty) 值,并且您想查看 所有 描述值,但只有一个 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

【讨论】:

    猜你喜欢
    • 2015-11-29
    • 2016-04-18
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多