dplyr
我所拥有的是一个SQL查询,意在获得一种产品和有史以来的最高价格。但是,问题在于我的第一列是产品的ID(p.ProductID),我希望第一列是产品的名称(p.name)。我不能简单地按产品名称分组,因为尽管某些产品具有相同的名称,但它们具有不同的ID。
据我所知,上面的查询为我提供了正确的输出,我将如何检索名称而不是ID?
答案 0 :(得分:0)
您可以PTHREAD_MUTEX_INITIALIZER
和GROUP BY
的组合:
ProductID
这种组合应该仍然是唯一的,因为理想情况下,给定的name
应该只映射到一个名称。
如果您确实只想显示SELECT
p.ProductID,
p.name,
MAX(hist.Cost) AS 'MaxPrice'
FROM Product AS p
INNER JOIN ProductCostHistory AS hist
ON p.ProductID = hist.ProductID
GROUP BY
p.ProductID,
p.name;
和最高价格,则可以对上述答案进行子查询,并仅选择ProductID
和name
。但是,这可能会导致一个给定名称的多个记录,因此您将无法将一个记录与另一个记录分开。
旁注:除非有其他令人信服的理由,否则请尝试使用显式联接语法。
答案 1 :(得分:0)
您可以在同一张表中使用Sub查询和INNER JOIN来满足您的要求-
select p.name,temp_prod.ProductID,temp_prod.cost as highes_cost from Product
INNER JOIN (
select
p.ProductID, max(hist.Cost) as cost as 'MaxPrice'
from
Product as p, ProductCostHistory as hist
where
p.ProductID = hist.ProductID
group by
p.ProductID
)temp_prod ON
( temp_prod.ProductID = Product.ProductID )
答案 2 :(得分:0)
您可以按照以下方式进行操作:
SELECT p.ProductId,
p.Name,
(SELECT MAX(cost) FROM ProductCostHistory as hist where p.ProductID = hist.ProductID)
FROM Product as p
或
SELECT p.ProductId, t2.cost, p.Name
FROM Product as p
INNER JOIN (
SELECT productId, MAX(cost) FROM ProductCostHistory
group by ProductId) t2
ON p.ProductId = t2.Productid