Mysql SQL获取值,然后计算这些值的总数

Mysql SQL获取值,然后计算这些值的总数,mysql,sql,Mysql,Sql,我正在制作一个拍卖脚本,上面有一张表,看起来像附件中的图片 在拍卖中,两个用户可以提交相同的出价金额,例如,两个玩家可以提交“1”的出价,这将使该出价金额总数为2 我需要一个查询,该查询获取所有用户的单个出价金额以及该出价金额在拍卖id范围内的总计数 目前,我首先得到了用户的出价: SELECT bid_amount FROM all_bids WHERE auction_id = '129' AND user_id = '9' 然后我在PHP中循环遍历每个数量,并执行以下操作 SELECT

我正在制作一个拍卖脚本,上面有一张表,看起来像附件中的图片

在拍卖中,两个用户可以提交相同的出价金额,例如,两个玩家可以提交“1”的出价,这将使该出价金额总数为2

我需要一个查询,该查询获取所有用户的单个出价金额以及该出价金额在拍卖id范围内的总计数

目前,我首先得到了用户的出价:

SELECT bid_amount FROM all_bids WHERE auction_id = '129' AND user_id = '9'
然后我在PHP中循环遍历每个数量,并执行以下操作

SELECT COUNT(*) FROM all_bids WHERE auction_id = '129' AND bid_amount = 'xxx'
但这当然是非常耗电的,我相信它可以在一个查询中完成

我已经到了

SELECT bid_amount,COUNT(*) FROM (SELECT bid_amount FROM all_bids WHERE auction_id = '129' AND user_id ='9') as foo GROUP BY bid_amount
返回了正确的投标金额,但计数均为1,这是错误的,因为我猜我的错误查询仅计算子查询内的值,而不是仅计算该用户提交的投标之外的值。我想您需要分组方式:

 SELECT  a.*, b.cnt from all_bids a 
 join (select bid_amount,COUNT(*) cnt from all_bids group by bid_amount) b 
 on a.bid_amount=b.bid_amount
 WHERE a.auction_id = '123' AND a.player_id = '456'
请注意,数值常量不需要单引号

嗯。你可能想把这句话说成:

select ab.bid_amount, count(*)
from all_bids ab
where ab.auction_id = 123 and
      ab.bid_amount in (select ab2.bid_amount
                        from all_bids ab2
                        where ab2.auction_id = ab.auction_id and ab2.player_id = 456
                       )
group by ab.bid_amount;

您的示例数据没有“拍卖123”或“玩家id”列。这使得你的问题很难理解。还可以用您正在使用的数据库标记问题并解释错误。该表非常庞大,有数千个出价,因此很难给出一个快照来指定,但我理解您的观点。请尝试并获得空结果,SQL抛出一个错误,表“bid\u amount”不存在,这很奇怪,因为表名是“all\u bids”,您是绝对的英雄!非常感谢你,真是太棒了!让我一天都很愉快根据phpmyadmin,SQL错误“在第4行”
select ab.bid_amount, count(*)
from all_bids ab
where ab.auction_id = 123 and
      ab.bid_amount in (select ab2.bid_amount
                        from all_bids ab2
                        where ab2.auction_id = ab.auction_id and ab2.player_id = 456
                       )
group by ab.bid_amount;