php - Mysql相同字段但不同条件的总和

标签 php mysql

我有下表:

CREATE TABLE IF NOT EXISTS `data` (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `amount` decimal(17,2) DEFAULT '0.00',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=999999;

我想通过单个查询返回所有记录的总和,以及前 100 条记录的总和。

现在我使用两个单独的查询:

SELECT COALESCE(SUM(amount),0) FROM data
SELECT COALESCE(SUM(amount),0) FROM data WHERE id<=100

我的想法与优化有关,因此 UNION 无法解决此问题。 我在想类似带有两个变量的 IF。

IF id<=100 THEN SUM1+=amount
IF id>0 THEN SUM2+=amount

但是我不知道如何将上面的翻译成MYSQL语言而不会出现任何错误。

最佳答案

这些查询对前一百行求和,然后从第 100 行开始,直到任意大的数字将获取所有行。

select sum(a.amount) from (select amount from data limit 100) a
select sum(a.amount) from (select amount from data limit 100,999999999) a

您对这两个变量的想法不会导致优化,因为它很可能会在数据库引擎中采用较慢的路径。您可以将上面的两个查询组合成:

select (select sum(amount) from data limit 100) as acount, (select sum(amount) from data limit 100,999999999) as bcount from dual

但这可能不会更快,因为无论如何数据库都会在内部将其分成两个查询。

关于php - Mysql相同字段但不同条件的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29220674/

相关文章:

PHP从sql查询得到不完整的结果表

mysql - 如何加速 MySQL INSERTs/UPDATEs?

MySQL - 如果有的话,那么也选择哪里

PHP MySQLi 准备语句 - SELECT

javascript - 将 php 变量访问到外部 javascript 文件中

php - PHP 中的 mysqli_query 问题 - 查询在 phpmyadmin 中有效,在 PHP 中无效

mysql - 获取结果中的行位置?

PHP 5.6、MySQL、SSL 和自签名证书

php - 未定义类型 'Tymon\JwTAuth\Contracts\JWTSubject'

php - 消息: Undefined variable and Invalid argument supplied for foreach() in Codeigniter