表名是“OrderDetails”,列如下:
OrderDetailID || ProductID || ProductName || OrderQuantity
我正在尝试选择多个列和Group By ProductID,同时具有OrderQuantity的SUM .
Select ProductID,ProductName,OrderQuantity Sum(OrderQuantity)
from OrderDetails Group By ProductID
但是这个代码当然会出错 . 我必须添加其他列名称分组,但这不是我想要的,因为我的数据有很多项目所以 results are unexpected that way.
示例数据查询:
OrderDetails中的ProductID,ProductName,OrderQuantity
结果如下:
ProductID ProductName OrderQuantity
1001 abc 5
1002 abc 23 (ProductNames can be same)
2002 xyz 8
3004 ytp 15
4001 aze 19
1001 abc 7 (2nd row of same ProductID)
预期结果:
ProductID ProductName OrderQuantity
1001 abc 12 (group by productID while summing)
1002 abc 23
2002 xyz 8
3004 ytp 15
4001 aze 19
如何选择多列和Group By ProductID列,因为ProductName不是唯一的?
在这样做的同时,也获得OrderQuantity列的总和 .
8 回答
SELECT ProductID, ProductName, OrderQuantity, SUM(OrderQuantity) FROM OrderDetails WHERE(OrderQuantity) IN(SELECT SUM(OrderQuantity) FROM OrderDetails GROUP BY OrderDetails) GROUP BY ProductID, ProductName, OrderQuantity;
我使用上面的解决方案来解决Oracle12c中的类似问题 .
== ==编辑
我再次检查了你的问题并得出结论,这是无法做到的 .
ProductName不是唯一的,它必须是
Group By
的一部分或从结果中排除 .例如,如果只有
Group By
ProductID,SQL会如何向您显示这些结果?请检查一下是否有效 .
您可以尝试以下查询 . 我假设你有一张表用于所有数据 .
mysql
GROUP_CONCAT
功能可以帮助https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat这将返回:
与@Urs Marian一样的想法在这里发布https://stackoverflow.com/a/38779277/906265
当我有多列选择时,我使用此技巧分组一列:
这有效 .
Your Data
Query
Result
你可以试试这个:
您只需要在
Select
子句中没有聚合函数的Group By
列 . 因此,在这种情况下,您可以使用Group By
ProductID和ProductName .