MySQL:如何为多列提供每列的总和

时间:2015-08-20 14:04:07

标签: mysql database

我有一张这样的表:

client_id | Product1 | Product2 | ... | Product170
--------------------------------------------------
4         |   Null   |   4      | ...  | 5 
32        |  5       |   3      | ...  | Null 
22        |  4       |  1       | ...  | 3

我希望每个产品都有总计。我想要一个或类似的视图,如下所示:

product_id | Total
--------------------------------------------------
Product1   |  9
Product2   |  8 
...   

最好省略总和为0的产品。

我能做到吗?我有很多列,所以我宁愿没有SELECT语句按名称调用每个列。

(上下文:此表包含企业的订单。客户将订购一些产品并存储在此处。如果您有更好的方式来组织此信息,请告诉我们)。

2 个答案:

答案 0 :(得分:2)

  

我能做到吗?

是的,用UNION写一个非常长的查询。

示例:

SELECT 'Product1' as product_id, SUM(Product1) as Total
FROM table
UNION
SELECT 'Product2' as product_id, SUM(Product2) as Total
FROM table
UNION
...

显然这不实用,所以......

  

如果您有更好的方法来整理此信息,请告诉我

组织此信息的更好方法是使用products表(具有唯一ID)和联结表(例如client_products)对其进行规范化。此表包含3列:client_idproduct_idn(产品数量或您的数字代表的任何数字)。主键为(client_id, product_id),并为product_id添加索引。

您可以使用SELECT product_id, SUM(n) FROM client_products GROUP BY product_id轻松查询此模型。

答案 1 :(得分:0)

您可以编写类似

的查询
SELECT sum(Product1) as Product1, sum(Product2) as Product1 FROM `product`

它将为您提供每个产品的总数,但是在一行中并且产品名称为列。您还可以添加> where子句中的0条件