Sql 无法使用行号和分组依据检索列值最高的行
我正在处理一个查询,该查询返回每种产品中价格最高的一行Sql 无法使用行号和分组依据检索列值最高的行,sql,sql-server,Sql,Sql Server,我正在处理一个查询,该查询返回每种产品中价格最高的一行 SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Price DESC) RN FROM @BestBids ) a WHERE RN=1 比如我有 表T1 Product Price Tax Location Pen 10 2.25 A Pen 5 1.25 B Pen
SELECT * FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Price DESC) RN
FROM @BestBids
) a
WHERE RN=1
比如我有
表T1
Product Price Tax Location
Pen 10 2.25 A
Pen 5 1.25 B
Pen 15 1.5 A
Board 25 5.26 A
Board 2 NULL B
Water 5 10 A
结果应该是这样的
Product Price Tax Location
Pen 15 1.5 A
Board 25 5.26 A
Water 5 10 A
我正在使用行数()
和分组依据
通过以下方法实现此目的
ALTER VIEW [dbo].[InferredBestBids]
AS
SELECT ROW_NUMBER() OVER ( ORDER BY ( SELECT NULL
) ) AS id ,
product ,
MAX(price) AS Price ,
MIN(tax) AS Tax ,
location
FROM [dbo].InferredBids_A
WHERE NOT ( proce IS NULL
AND tax IS NULL
)
GROUP BY market ,
term
GO
当我运行上述查询时,它抛出了错误
Column 'dbo.InferredBids_A.Location' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause
当我尝试按
位置
对查询结果进行分组时,它返回了一个产品
的多行,结果不正确,具体取决于位置如果您正确使用了行号子句,然后仅根据行号进行选择,则不需要使用分组方式
。如果您出于其他原因需要,可以在外部查询的前面添加一个额外的row\u number
调用
如果正确地使用了行号子句,然后仅根据行号选择,则不需要分组依据
。如果您出于其他原因需要,可以在外部查询的前面添加一个额外的row\u number
调用
如果正确地使用了行号子句,然后仅根据行号选择,则不需要分组依据
。如果您出于其他原因需要,可以在外部查询的前面添加一个额外的row\u number
调用
如果正确地使用了行号子句,然后仅根据行号选择,则不需要分组依据
。如果您出于其他原因需要,可以在外部查询的前面添加一个额外的row\u number
调用
如果选择了已聚合的内容,则必须按选择列表中未聚合的任何其他内容进行分组:
SELECT Product, Price ,Tax, Location
FROM (SELECT Product, Price ,Tax, Location,
RANK() OVER (PARTITION BY Product ORDER BY Price DESC) N
FROM InferredBids_A
WHERE Price IS NOT NULL AND Tax IS NOT NULL
) T WHERE N = 1
(RANK
将为领带指定行,如果您不关心这些,请使用行号
)如果您选择了已聚合的内容,则必须按分组
选择列表中未聚合的其他内容:
SELECT Product, Price ,Tax, Location
FROM (SELECT Product, Price ,Tax, Location,
RANK() OVER (PARTITION BY Product ORDER BY Price DESC) N
FROM InferredBids_A
WHERE Price IS NOT NULL AND Tax IS NOT NULL
) T WHERE N = 1
(RANK
将为领带指定行,如果您不关心这些,请使用行号
)如果您选择了已聚合的内容,则必须按分组
选择列表中未聚合的其他内容:
SELECT Product, Price ,Tax, Location
FROM (SELECT Product, Price ,Tax, Location,
RANK() OVER (PARTITION BY Product ORDER BY Price DESC) N
FROM InferredBids_A
WHERE Price IS NOT NULL AND Tax IS NOT NULL
) T WHERE N = 1
(RANK
将为领带指定行,如果您不关心这些,请使用行号
)如果您选择了已聚合的内容,则必须按分组
选择列表中未聚合的其他内容:
SELECT Product, Price ,Tax, Location
FROM (SELECT Product, Price ,Tax, Location,
RANK() OVER (PARTITION BY Product ORDER BY Price DESC) N
FROM InferredBids_A
WHERE Price IS NOT NULL AND Tax IS NOT NULL
) T WHERE N = 1
(RANK
将给出领带的行数,如果您不关心这些,请使用行数)制作一些测试数据:
DECLARE @BestBids TABLE
(
Product VARCHAR(20),
Price INT,
Tax DECIMAL(10,2),
Location VARCHAR(10)
)
INSERT INTO @BestBids
VALUES
('Pen', 10, 2.25, 'A'),
('Pen', 5, 1.25, 'B'),
('Pen', 15, 1.5, 'A'),
('Board', 25, 5.26, 'A'),
('Board', 2, NULL, 'B'),
('Water', 5, 10, 'A');
我们将我们的行号设置为每种产品的最高价格
SELECT * FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Price DESC) RN
FROM @BestBids
) a
WHERE RN=1
我们包装sql并只选择第一个行号。以下是输出:
Product Price Tax Location RN
Board 25 5.26 A 1
Pen 15 1.50 A 1
Water 5 10.00 A 1
制作一些测试数据:
DECLARE @BestBids TABLE
(
Product VARCHAR(20),
Price INT,
Tax DECIMAL(10,2),
Location VARCHAR(10)
)
INSERT INTO @BestBids
VALUES
('Pen', 10, 2.25, 'A'),
('Pen', 5, 1.25, 'B'),
('Pen', 15, 1.5, 'A'),
('Board', 25, 5.26, 'A'),
('Board', 2, NULL, 'B'),
('Water', 5, 10, 'A');
我们将我们的行号设置为每种产品的最高价格
SELECT * FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Price DESC) RN
FROM @BestBids
) a
WHERE RN=1
我们包装sql并只选择第一个行号。以下是输出:
Product Price Tax Location RN
Board 25 5.26 A 1
Pen 15 1.50 A 1
Water 5 10.00 A 1
制作一些测试数据:
DECLARE @BestBids TABLE
(
Product VARCHAR(20),
Price INT,
Tax DECIMAL(10,2),
Location VARCHAR(10)
)
INSERT INTO @BestBids
VALUES
('Pen', 10, 2.25, 'A'),
('Pen', 5, 1.25, 'B'),
('Pen', 15, 1.5, 'A'),
('Board', 25, 5.26, 'A'),
('Board', 2, NULL, 'B'),
('Water', 5, 10, 'A');
我们将我们的行号设置为每种产品的最高价格
SELECT * FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Price DESC) RN
FROM @BestBids
) a
WHERE RN=1
我们包装sql并只选择第一个行号。以下是输出:
Product Price Tax Location RN
Board 25 5.26 A 1
Pen 15 1.50 A 1
Water 5 10.00 A 1
制作一些测试数据:
DECLARE @BestBids TABLE
(
Product VARCHAR(20),
Price INT,
Tax DECIMAL(10,2),
Location VARCHAR(10)
)
INSERT INTO @BestBids
VALUES
('Pen', 10, 2.25, 'A'),
('Pen', 5, 1.25, 'B'),
('Pen', 15, 1.5, 'A'),
('Board', 25, 5.26, 'A'),
('Board', 2, NULL, 'B'),
('Water', 5, 10, 'A');
我们将我们的行号设置为每种产品的最高价格
SELECT * FROM
(
SELECT *,
ROW_NUMBER() OVER (PARTITION BY Product ORDER BY Price DESC) RN
FROM @BestBids
) a
WHERE RN=1
我们包装sql并只选择第一个行号。以下是输出:
Product Price Tax Location RN
Board 25 5.26 A 1
Pen 15 1.50 A 1
Water 5 10.00 A 1
您可以使用公共表表达式:
WITH cte
AS ( SELECT product ,
MAX(price) AS price
FROM dbo.InferredBids_A
)
SELECT product ,
price ,
tax ,
location
FROM dbo.InferredBids_A tbl
INNER JOIN cte ON cte.product = tbl.product
AND cte.price = tbl.price
您可以使用公共表表达式:
WITH cte
AS ( SELECT product ,
MAX(price) AS price
FROM dbo.InferredBids_A
)
SELECT product ,
price ,
tax ,
location
FROM dbo.InferredBids_A tbl
INNER JOIN cte ON cte.product = tbl.product
AND cte.price = tbl.price
您可以使用公共表表达式:
WITH cte
AS ( SELECT product ,
MAX(price) AS price
FROM dbo.InferredBids_A
)
SELECT product ,
price ,
tax ,
location
FROM dbo.InferredBids_A tbl
INNER JOIN cte ON cte.product = tbl.product
AND cte.price = tbl.price
您可以使用公共表表达式:
WITH cte
AS ( SELECT product ,
MAX(price) AS price
FROM dbo.InferredBids_A
)
SELECT product ,
price ,
tax ,
location
FROM dbo.InferredBids_A tbl
INNER JOIN cte ON cte.product = tbl.product
AND cte.price = tbl.price
指定的结果集不存在;t不需要MAX()
或分组依据
。看起来您想要的是:ROW_NUMBER()(按产品订单按价格描述划分)作为rn
和WHERE子句中的谓词rn=1
;t不需要MAX()
或分组依据
。看起来您想要的是:ROW_NUMBER()(按产品订单按价格描述划分)作为rn
和WHERE子句中的谓词rn=1
;t不需要MAX()
或分组依据
。看起来您想要的是:ROW_NUMBER()(按产品订单按价格描述划分)作为rn
和WHERE子句中的谓词rn=1
;t不需要MAX()
或分组依据
。看起来您想要的是:ROW_NUMBER()(按产品订单按价格描述划分)作为rn
和WHERE子句中的谓词rn=1
。