我有下表:
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/