Sql 查询以查找具有多个group by属性的值的最大值
我正在尝试获取某个特定项目的最大出价金额,并显示已出价该金额的用户 我能够在两个不同的查询中得到结果,每个查询返回我想要的内容的子集Sql 查询以查找具有多个group by属性的值的最大值,sql,azure-sql-database,Sql,Azure Sql Database,我正在尝试获取某个特定项目的最大出价金额,并显示已出价该金额的用户 我能够在两个不同的查询中得到结果,每个查询返回我想要的内容的子集 select username, auctionbids.itemid, description, bidamt from AuctionBids inner join users on auctionbids.userid = users.id inner join auctionitems on auctionbids.itemid = auctionite
select username, auctionbids.itemid, description, bidamt from AuctionBids
inner join users on auctionbids.userid = users.id
inner join auctionitems on auctionbids.itemid = auctionitems.itemid
select ab.itemid,max(ab.bidamt) as bidmax from auctionbids as ab group by ab.itemid
我想获取用户名、itemid、ItemDescripton、maxbidamt加入三个表——users、auctionitems、auctionbids
用户包含userid和username
拍卖项目包含项目ID和项目描述
auctionbids包含userid、itemid、bidamt如果没有示例数据,则无法验证其是否正常工作。但您需要将特定项目的bidamt与MAX bidamt匹配
SELECT DISTINCT
users.username,
auctionbids.itemid,
auctionitems.description,
auctionbids.bidamt
FROM
users
INNER JOIN auctionbids on users.userid = auctionbids.userid
INNER JOIN auctionitems on auctionbids.itemid = auctionitems.itemid
WHERE
auctionbids.bidamt = (SELECT MAX(bidamt) OVER (PARTITION BY itemid, description))
AND
itemid = < whatever you want >
如果没有示例数据,就不可能验证其是否正确工作。但您需要将特定项目的bidamt与MAX bidamt匹配
SELECT DISTINCT
users.username,
auctionbids.itemid,
auctionitems.description,
auctionbids.bidamt
FROM
users
INNER JOIN auctionbids on users.userid = auctionbids.userid
INNER JOIN auctionitems on auctionbids.itemid = auctionitems.itemid
WHERE
auctionbids.bidamt = (SELECT MAX(bidamt) OVER (PARTITION BY itemid, description))
AND
itemid = < whatever you want >
以下查询应执行您想要的操作:
SELECT a.item_description,a.username,a.bidamt FROM
(
SELECT au.item_description,u.username,ab.bidamt, RANK() OVER(PARTITION BY au.itemid ORDER BY ISNULL(ab.bidamt,0) DESC) AS [Rank]
FROM auctionitems au
LEFT JOIN auctionbids ab ON au.itemid = ab.itemid
LEFT JOIN users u ON ab.userid = u.userid ) a WHERE [Rank] = 1
以下查询应执行您想要的操作:
SELECT a.item_description,a.username,a.bidamt FROM
(
SELECT au.item_description,u.username,ab.bidamt, RANK() OVER(PARTITION BY au.itemid ORDER BY ISNULL(ab.bidamt,0) DESC) AS [Rank]
FROM auctionitems au
LEFT JOIN auctionbids ab ON au.itemid = ab.itemid
LEFT JOIN users u ON ab.userid = u.userid ) a WHERE [Rank] = 1
正如您所说,两个不同的查询都返回您想要的内容的子集,您的查询应该是这样的:
SELECT am.username, am.itemid, am.descripton, max(am.bidamt) AS bidmax
FROM (
SELECT username, auctionbids.itemid, auctionitems.description, bidamt FROM AuctionBids
INNER JOIN users ON auctionbids.userid = users.id
INNER JOIN auctionitems ON auctionbids.itemid = auctionitems.itemid
) AS am
GROUP BY am.itemid
正如您所说,两个不同的查询都返回您想要的内容的子集,您的查询应该是这样的:
SELECT am.username, am.itemid, am.descripton, max(am.bidamt) AS bidmax
FROM (
SELECT username, auctionbids.itemid, auctionitems.description, bidamt FROM AuctionBids
INNER JOIN users ON auctionbids.userid = users.id
INNER JOIN auctionitems ON auctionbids.itemid = auctionitems.itemid
) AS am
GROUP BY am.itemid
谢谢你提出这个问题的想法-
SELECT am.*, auctionbids.submitted, users.username, auctionitems.description
FROM
(SELECT ab.itemid, max(ab.bidamt) as bidmax
FROM
auctionbids ab
GROUP BY ab.itemid) AS am
INNER JOIN auctionbids ON am.itemid = auctionbids.itemid and am.bidmax = auctionbids.bidamt
INNER JOIN users ON auctionbids.userid = users.id
INNER JOIN auctionitems ON auctionbids.itemid = auctionitems.itemid
因此,基本上,必须通过itemid上的groupby找到max,然后通过与其余表的内部连接来获取属性。感谢导致此查询的想法-
SELECT am.*, auctionbids.submitted, users.username, auctionitems.description
FROM
(SELECT ab.itemid, max(ab.bidamt) as bidmax
FROM
auctionbids ab
GROUP BY ab.itemid) AS am
INNER JOIN auctionbids ON am.itemid = auctionbids.itemid and am.bidmax = auctionbids.bidamt
INNER JOIN users ON auctionbids.userid = users.id
INNER JOIN auctionitems ON auctionbids.itemid = auctionitems.itemid
因此,基本上必须在itemid上通过group by找到max,然后通过与其余表的内部连接来获取属性。感谢您的尝试。此查询提供每个项目的每个用户的最高出价。我正在寻找每个项目的最高出价,并希望显示用户是谁。@FakhruddinBandukwala我已修改了代码,请检查这是否有助于感谢。这可以工作,但由于左连接,返回了大量空行。所以我在WHERE子句中添加了a.bidamt>0。感谢您的尝试。此查询提供每个项目的每个用户的最高出价。我正在寻找每个项目的最高出价,并希望显示用户是谁。@FakhruddinBandukwala我已修改了代码,请检查这是否有助于感谢。这可以工作,但由于左连接,返回了大量空行。因此,我将a.bidamt>0添加到WHERE子句中。我要查找的是Group by itemid,但是由于select子句的属性多于Group by,因此此查询不起作用。不过,他确实提出了一些想法。谢谢。我要的是Group by itemid,但是由于select子句的属性比Group by子句的属性多,因此此查询不起作用。不过,他确实提出了一些想法。谢谢。尝试此操作后,它将在加入表后返回所有行。尝试此操作后,它将在加入表后返回所有行。