【问题标题】:MYSQL COUNT(column) returns multiple lines unexpectedlyMYSQL COUNT(column) 意外返回多行
【发布时间】:2019-10-25 09:55:42
【问题描述】:

我有两张桌子:

1.从 gas_trades_bids 中选择 *;

+----+---------+----------+--------+------------+------------+
| id | user_id | claim_id | amount | lots_value | timestmp   |
+----+---------+----------+--------+------------+------------+
|  5 |       9 |       11 |     60 |       NULL | 1571317861 |
|  6 |       9 |       11 |    100 |       NULL | 1571656888 |
|  7 |       9 |       11 |     50 |       NULL | 1571727353 |
|  8 |       9 |       11 |     50 |       NULL | 1571918296 |
+----+---------+----------+--------+------------+------------+
4 rows in set (0.00 sec)

2。 SELECT * FROM gas_trades_offers;

+----+---------+----------+--------+------------+----------+------------+
| id | user_id | claim_id | amount | lots_value | accepted | timestmp   |
+----+---------+----------+--------+------------+----------+------------+
|  8 |       9 |       11 |     33 |         22 |     NULL | 1571918576 |
|  9 |       9 |       11 |     33 |         22 |        1 | 1571918576 |
| 10 |       9 |       11 |     33 |         22 |        1 | 1571918576 |
+----+---------+----------+--------+------------+----------+------------+
3 rows in set (0.01 sec)

目标是:

  1. 计算 gas_trades_bids.claim_id = gas_trades_offers_claim_id 和 gas_trades_bids.claim_id = 11 和 gas_trades_bids.user_id = 11 的行数
  2. 获取 gas_trades_offers.lots_value 列值的总和

为了达到这个目的,我尝试运行:

SELECT COUNT(bids.id) amount, SUM(offers.lots_value) 
  FROM gas_trades_offers offers, (SELECT * FROM gas_trades_bids) bids 
 WHERE bids.user_id = 9 
   AND bids.user_id = offers.user_id

但我有多行:'

+--------+------------------------+
| amount | SUM(offers.lots_value) |
+--------+------------------------+
|      3 |                     66 |
|      3 |                     66 |
|      3 |                     66 |
|      3 |                     66 |
+--------+------------------------+
4 rows in set (0.01 sec)

我做错了什么?

我预计只会得到:

+--------+------------------------+
| amount | SUM(offers.lots_value) |
+--------+------------------------+
|      3 |                     66 |
+--------|------------------------|

我不需要使用 GROUP BY!

【问题讨论】:

  • @Casper Nah,我不需要使用 GROUP BY 语法。你错了
  • 您要计算哪个表(id)?我不太明白这一点。你能解释更多吗?如果从出价计数将返回 4,从订单计数将返回 3
  • @momo 我想计算gas_trades_bids 中的行数,其中claim_id 列应该等于gas_trades_offers.claim_id
  • 您的意思是gas_trades_bids.claim_id 列的值应该存在于gas_trades_offers 中的哪个位置?

标签: mysql select count


【解决方案1】:

这正是您所需要的吗?希望这个查询能正常运行。

SELECT COUNT(offers.id) amount,
       SUM(offers.lots_value)
FROM gas_trades_offers offers
WHERE offers.user_id = 9 and offers.claim_id = 11
      AND exists (SELECT id FROM gas_trades_bids bids WHERE bids.claim_id = offers.claim_id and bids.user_id = offers.user_id)

【讨论】:

  • 是的。太感谢了!您能解释一下为什么我的案例中有多行吗?
  • 我尝试了您对我的示例数据的查询。但它只返回了 1 条记录,其数量 = 12 和总和 = 264。似乎它从连接结果中计算和总和。
  • 你现在用过PDO吗?
  • 不,我使用 mysql 和 phpMyadmin 工具来测试您的查询
  • 您已经获得了包含汇总列的行。你的结果是错误的。运行您的查询后,我得到了 amount - 3, SUM(offers.lots_value) - 66
【解决方案2】:

试试这个:

SELECT COUNT(bids.id) amount,
       SUM(offers.lots_value)
FROM gas_trades_offers offers
JOIN gas_trade_bids bids ON bids.user_id = offers.user_id
WHERE offers.user_id = 9;

【讨论】:

  • 它返回给我这个:
  • 金额 - 12 SUM(offers.lots_value) - 264
  • 它看起来像来自 COUNT 的多行的总和
  • 4 * 3 = 12, 66 * 4 = 264
猜你喜欢
  • 2015-07-22
  • 2022-10-14
  • 2010-09-19
  • 2016-07-31
  • 1970-01-01
  • 2012-04-04
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
相关资源
最近更新 更多