我有一张这样的表:
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语句按名称调用每个列。
(上下文:此表包含企业的订单。客户将订购一些产品并存储在此处。如果您有更好的方式来组织此信息,请告诉我们)。
答案 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_id
,product_id
和n
(产品数量或您的数字代表的任何数字)。主键为(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条件