SQL标准值和变化
下面是一个数据示例SQL标准值和变化,sql,sql-server-2012,Sql,Sql Server 2012,下面是一个数据示例 UnitID ITEM_Num Price 13446 71079 45.57 13447 71079 45.57 13448 71079 52.50 13449 71079 45.57 13450 71079 36.22 实际数据集大约有100个唯一的UnitID和700个唯一的Item_Num值。我试图确定每个项目
UnitID ITEM_Num Price
13446 71079 45.57
13447 71079 45.57
13448 71079 52.50
13449 71079 45.57
13450 71079 36.22
实际数据集大约有100个唯一的UnitID和700个唯一的Item_Num值。我试图确定每个项目的最常见价格,然后选择与该标准相差超过指定百分比的任何记录
理想情况下,我们会为每件商品制定一个标准价格,但我们没有。找到最常见价值的最佳方法是什么。此外,还有一个功能,可以快速排列变化最大的项目是价格
这是SQL Server 2012 您可以使用GROUP BY语句:
SELECT Price, count(*) FROM my_table GROUP BY Price ORDER BY Price ASC
希望这有帮助 以下查询应在SQL Server中工作。它应该以低于或高于最常见价格10%的价格返还每件商品
;WITH cte AS (
SELECT
RANK() OVER (PARTITION BY ITEM_Num ORDER BY COUNT(1) DESC) AS 'Rank'
, ITEM_Num
, Price
FROM Units
GROUP BY ITEM_Num, Price
)
SELECT u1.UnitID
, u1.ITEM_Num
, u1.Price
, u2.Price AS 'most common price'
FROM Units u1
INNER JOIN cte AS u2
ON u2.ITEM_Num = u1.ITEM_Num
AND u2.Rank = 1
WHERE ABS(u1.Price - u2.Price) >= (u2.Price * 0.1);
编辑:我编写的查询不知道您的DBMS,使用SQL Server的排名函数可能会更有效
编辑2:按价格分组、按计数(*)描述、限制1或其他内容您遇到了什么问题?您使用的是哪种DBMS?博士后?Oracle?是的,我修改了答案我的DBMS是SQL server。联接中的派生表仅返回一个值。我理解这个概念,但语法不起作用。我应该得到的价格与最高计数的项目相同的价格,但我不是。我应该使用over和Row\u number吗?
我正在尝试确定每个项目的最常见价格,然后选择与该标准相差超过指定百分比的任何记录。
子查询检索最常见的价格。外部查询选择与标准相差超过指定百分比(在我的示例中为10%)的任何记录。但它必须是每项最常见的价格,而不是整个数据集最常见的价格。您是对的,我没有用两个不同的项测试它。我使用RANK()更新了脚本,并使用多个项目对其进行了测试。您可以看到我的SQLFiddle示例。这不是每次价格改变时都会创建一组新的行号吗?我看不出它是如何排列最常见的价格价值的。
Create table #t(
UnitID int,
Item_Num int,
Price money
)
Insert into #t(Unitid, Item_Num, Price)
values(13446, 71079, 45.57 ),
(13447, 71079, 45.57),
(13448, 71079, 52.50),
(13449, 71079, 45.57),
(13450, 71079, 36.22)
;with cte as (
Select
Unitid, Item_Num, Price,
Row_Number() over ( partition by item_num order by price) rownum
from #t
)
Select
u.UnitID,
u.Item_Num,
u.Price,
U1.price as CommonPrice,
u.RowNum,
U.Price*0.1,
(u.price +(u.price*0.1)) as NewPrice
from cte as U
inner join #t u1 on u.item_num =u1.item_num
where u.rownum =1