首页 > 解决方案 > 在 SQL 中计算一个组

问题描述

我需要创建一个对GROUP BY子句计数的查询。具体来说,在Order_IDSUB_ID列上并计算Product_IDs每个Order_ID和的数量SUB_ID

它应该如下所示:

在此处输入图像描述

但是,数据设置有点奇怪,获取信息的唯一方法(当然减去 Count 列)是:

SELECT
    tbl1.Order_Id
    ,tbl1.Sub_Id
    ,tbl1.Product_Id
    ,tbl1.Product_Value
    ,tbl2.Product_Owner
    ,tbl2.Owner_Id

FROM
tbl1 AS tbl1
LEFT OUTER JOIN
    tbl2 AS tbl2 ON tbl1.Order_Id=tbl2.Order_Id AND tbl1.Sub_Id=tbl2.Sub_Id

我将如何添加这样的列?

标签: mysqlsqlgroup-by

解决方案


我想你只需要GROUP BY

SELECT tbl1.Order_Id, tbl1.Sub_Id,
       COUNT(tbl1.Product_Id)
FROM tbl1 LEFT OUTER JOIN
     tbl2
     ON tbl1.Order_Id = tbl2.Order_Id AND tbl1.Sub_Id = tbl2.Sub_Id
GROUP BY tbl1.Order_Id, tbl1.Sub_Id;

因为查询仅从tbl1并使用 a返回行LEFT JOIN,所以您应该能够执行以下操作:

SELECT tbl1.Order_Id, tbl1.Sub_Id,
       COUNT(tbl1.Product_Id)
FROM tbl1 
GROUP BY tbl1.Order_Id, tbl1.Sub_Id;

编辑:

我明白了,那是样本数据。在这种情况下,您可能只想row_number()

SELECT tbl1.Order_Id, tbl1.Sub_Id, tbl1.Product_Id, tbl1.Product_Value,
       tbl2.Product_Owner, tbl2.Owner_Id
       ROW_NUMBER() OVER (PARTITION BY tbl1.Order_Id, tbl1.Sub_Id ORDER BY tbl1.Product_Id) as seqnum
FROM tbl1 LEFT OUTER JOIN
     tbl2 
     ON tbl1.Order_Id = tbl2.Order_Id AND
        tbl1.Sub_Id = tbl2.Sub_Id;

推荐阅读