Подсчет по группе в SQL

#mysql #sql #group-by

#mysql #sql #группировать по

Вопрос:

Мне нужно создать запрос, который подсчитывает по GROUP BY предложению. В частности, по столбцам Order_ID и SUB_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
  

Как бы я добавил такой столбец?

Ответ №1:

Я думаю, вам просто нужно 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 и использует 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;
  

Комментарии:

1. Это возвращает общее количество, и я хотел бы получить кумулятивное количество. Но мне нравится идея объединить это в отдельную таблицу.