【问题标题】:SQL getting values and then total count of those valuesSQL获取值,然后这些值的总数
【发布时间】:2018-03-21 09:19:41
【问题描述】:

我正在编写一个拍卖脚本,其中包含一个看起来像所附图像的表格。

在拍卖中,两个用户可以出价相同,例如,两个玩家可以出价“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 这是错误的,因为我猜我的错误查询仅计算子查询内的值,而不是仅计算该用户放置的出价之外的值

【问题讨论】:

  • 您的示例数据没有拍卖“123”或 player_id 列。这使您的问题难以理解。还要用您正在使用的数据库标记问题并解释错误。
  • 这张桌子很大,有数千个出价,所以很难给出一个具体的快照,但我理解你的观点

标签: mysql sql


【解决方案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'

【讨论】:

  • 试过了,只是得到 NULL 结果,SQL 抛出一个错误,表 'bid_amount' 不存在,这很奇怪,因为表名是 'all_bids'
  • 你绝对的英雄!太感谢了,说的很到位!让我开心!
【解决方案2】:

我想你想要group by:

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

请注意,数字常量不需要单引号。

嗯。您可能希望将其表述为:

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;

【讨论】:

  • 不幸的是,根据 phpmyadmin,SQL 错误“在第 4 行”
猜你喜欢
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多