【问题标题】:SQL How to count multiple columns with similar valuesSQL如何计算具有相似值的多列
【发布时间】:2017-01-10 18:57:55
【问题描述】:

我有一张表,其中包含几家商店的商品销售情况,请参阅下面的示例表。

商店 商品 价格 成本 利润 ------- ------ ------- ------ -------- ABC 啤酒 5 3 2 ABC 啤酒 5 3 2 ABC 啤酒 4 3 1

我需要统计价格相近的商品,所以上表的结果应该类似于...

商店 项目 计数 价格 成本 利润 ------- ------ ------- -------- ------ -------- ABC 啤酒 2 5 3 2 ABC 啤酒 1 4 3 1

我尝试了以下 SQL 查询但没有成功...

SELECT Store,Item,Count(Price),Price,Cost,Profit
FROM Table
GROUP BY Store,Item,Price,Cost,Profit

想法?

【问题讨论】:

  • 您的查询是正确的,正在返回您的预期结果。它给了你什么?
  • 我得到 3 行,每行计数为 1
  • 查询正确。您的 varchar 列中一定有一些隐藏字符,因为我刚刚在自己的系统上对其进行了测试并产生了正确的输出。
  • 您实际上不是在尝试获取列值相似的行的“计数”吗?
  • 您是否按浮点数对这些数字进行分组?如果是,您需要将它们转换为具有适当精度和比例的小数才能使其正常工作。

标签: sql-server count multiple-columns


【解决方案1】:

您说我需要计算价格相似的商品。鉴于您的示例数据,您的查询有效。

declare @table table (Store varchar(3), Item varchar(16), Price int, Cost int, Profit int)
insert into @table (Store, Item, Price, Cost, Profit) 
values

('ABC','Beer',5,3,2),
('ABC','Beer',5,3,2),  
('ABC','Beer',4,3,1)  

SELECT 
    Store,
    Item,
    Count(Price) as CT,
    Price,
    Cost,
    Profit
FROM @table
GROUP BY Store,Item,Price,Cost,Profit

但是,如果每个Store / Item / Count tupleCostProfit 列不同,您的分组将不会显示您想要的结果。

declare @table2 table (Store varchar(3), Item varchar(16), Price int, Cost int, Profit int)
insert into @table2 (Store, Item, Price, Cost, Profit) 
values

('ABC','Beer',5,3,2), --notice change in cost and profit
('ABC','Beer',5,2,1), --notice change in cost and profit 
('ABC','Beer',4,3,1)  

SELECT 
    Store,
    Item,
    Count(Price) as CT,
    Price,
    Cost,
    Profit
FROM @table2
GROUP BY Store,Item,Price,Cost,Profit

假设在你的真实数据中,情况就是这样——你的CostProfit 是不同的。因此,您需要从SELECTGROUP BY 中删除这些列才能回答您的问题,我需要计算价格相似的商品另外,您可能还想从SELECTGROUP BY 中删除Store 列。

SELECT 
    Store,
    Item,
    Count(Price) as CT,
    Price
FROM @table2
GROUP BY Store,Item,Price

【讨论】:

  • 价格可能会发生变化,通常是降价或原价,成本永远不会改变。我想我必须使用 2 个表来获得我需要的结果。第一张表,商店/商品/计数/价格,第二张表包括成本/利润。
  • @neualex 按照您的建议标准化您的数据通常是个好主意
  • 如果我在桌子上只有一家商店,例如 ABC,则类似价格的计数对于那家商店是正确的,但如果我至少有 3 家不同的商店(S1、S2、S3)并且他们都有相似的价格,我如何计算每家商店的相似价格?相同的查询计算所有商店的相似价格,而不是每个商店。如果需要,我可以提供数据。
  • @neualex 最后一个查询对每个商店进行。从 select 和 group by 中删除 store 将为您提供整体结果。如果这不起作用,我会打开一个新问题并提供示例数据和预期输出,以便每个人都可以提供帮助
猜你喜欢
  • 2021-08-20
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多