【问题标题】:GROUP BY not working in left join queryGROUP BY 在左连接查询中不起作用
【发布时间】:2015-10-13 14:09:23
【问题描述】:

我正在尝试在左连接 sql 查询中使用 group by 子句,但它不起作用。 请帮帮我,提前谢谢。

SELECT Cust_Mst_Det.Cust_Hd_Code,
       Cust_Mst_Det.First_Name,
       SL_HEAD20152016.vouch_date AS invoice_2,
       SL_HEAD20142015.vouch_date AS invoice_1,
       Cust_Mst_Hd.EMail
FROM Cust_Mst_Det
LEFT JOIN SL_HEAD20142015 ON Cust_Mst_Det.Cust_Hd_Code=SL_HEAD20142015.Member_Code
LEFT JOIN SL_HEAD20152016 ON Cust_Mst_Det.Cust_Hd_Code=SL_HEAD20152016.Member_Code
LEFT JOIN Cust_Mst_Hd ON Cust_Mst_Det.Cust_Hd_Code=Cust_Mst_Hd.Cust_Hd_Code
WHERE cust_mst_det.first_name!='NIL'
GROUP BY Cust_Mst_Det.Cust_Hd_Code
ORDER BY SL_HEAD20152016.vouch_date DESC,
         SL_HEAD20142015.vouch_date

【问题讨论】:

  • "...它不工作" --> 请写一个更好的解释!什么不工作?你有错误吗?你会得到意想不到的结果吗?你得到什么结果?你期待什么结果? AND:您使用什么 RDBMS?

标签: sql join


【解决方案1】:

我不确定您使用的是哪个 DBMS,但在 Oracle 上您的查询根本不起作用。

  • 第一个问题:GROUP BY 语句与聚合函数一起使用,以按一个或多个列对结果集进行分组。您的 SELECT 语句中没有任何聚合函数(计数、最大值等)
  • 第二个问题:您必须在 GROUP BY 语句中指定 SELECT 语句中的所有列(不包括表示聚合结果的列)。

正如我所说,我不知道您使用的是哪个数据库,但这两点应该适用于大多数 SQL 标准。

【讨论】:

    【解决方案2】:

    似乎不可能在 GROUP BY 汇总中使用 ORDER BY。我的基本逻辑是有缺陷的。我需要运行以下子查询。

    前:

    SELECT p.*, pp.price 
    FROM products p 
    LEFT JOIN ( SELECT price FROM product_price ORDER BY date_updated DESC ) pp 
    ON p.product_id = pp.product_id GROUP BY p.product_id;
    

    这会影响性能,但由于它是每一行的相同子查询,所以应该不会太糟糕。

    【讨论】:

      最近更新 更多