Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 当每笔交易的数量存储在单独的字段中时,使用GROUP BY统计购买数量_Mysql_Sql_Group By_Count_Phpmyadmin - Fatal编程技术网

Mysql 当每笔交易的数量存储在单独的字段中时,使用GROUP BY统计购买数量

Mysql 当每笔交易的数量存储在单独的字段中时,使用GROUP BY统计购买数量,mysql,sql,group-by,count,phpmyadmin,Mysql,Sql,Group By,Count,Phpmyadmin,我有一个名为orders的表,其中每行存储一个订单或采购。这是其数据的一个示例: 在上表中,每个id对应一个订单product\u id是在交易中购买的产品的id。请注意,有一个名为quantity的列存储了每个订单上购买的产品数量。我需要的是一个查询,它返回按product\u id列出的销售额。这就是我迄今为止为实现这一目标所做的工作: SELECT COUNT(id), `product_id` FROM `orders` GROUP BY `deal_id`; 结果是: 问题是结果

我有一个名为
orders
的表,其中每行存储一个订单或采购。这是其数据的一个示例:

在上表中,每个
id
对应一个订单
product\u id
是在交易中购买的产品的id。请注意,有一个名为
quantity
的列存储了每个订单上购买的产品数量。我需要的是一个查询,它返回按
product\u id
列出的销售额。这就是我迄今为止为实现这一目标所做的工作:

SELECT COUNT(id), `product_id` FROM `orders` GROUP BY `deal_id`;
结果是:


问题是结果忽略了列
quantity
。我需要以考虑
数量的方式编写SQL查询。谢谢。

正如Giorgos Betsos和Barmar所建议的,这就是解决方案:

SELECT SUM(quantity), `product_id` FROM `orders` GROUP BY `product_id`;

按产品划分的销售额如下所示:

SELECT o.product_id, COUNT(*) as num_orders, SUM(o.quantity) as total_quantity
FROM orders o
GROUP BY o.product_id;
您正在学习SQL,下面是一些建议:

  • 始终限定列名,以便您或其他任何人知道它们来自哪些列
  • 在聚合查询中,将未聚合的列放在第一位(除非您有充分的理由这样做)
  • 在聚合查询中,确保未聚合的列与
    分组依据
    列匹配。如果未聚合列位于第一位,则更简单

添加
总和(数量)
?您说过“我需要一个返回交易数量的查询”。数量与此有什么关系?它应该如何将数量计入帐户?但你说你想要的是交易数量,而不是衬衫数量。然后使用
SUM(quantity)
而不是
COUNT(id)
@草莓我修正了它。你是对的。我写了一些错误的东西,但现在已经修复了,你会同意这个新版本,因为它适合我。很好的建议。非常感谢。我只是想澄清一下这一点:
“在聚合查询中,将未聚合的列放在第一位(除非您有充分的理由这样做)。”
这是惯例还是良好做法?把它放在最后,并像这样始终如一地做,这样你总是希望所有聚合列都放在第一位,而未聚合列放在最后呢?@JaimeMontoya。更容易看出它们与
分组方式相匹配。诚然,我一直倾向于首先使用分组列的结果集,但这里的建议是通过
匹配
分组。这很有意义,而且将分组列放在第一位听起来是一种很好的做法。