#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. Это возвращает общее количество, и я хотел бы получить кумулятивное количество. Но мне нравится идея объединить это в отдельную таблицу.