我有这样的查询:
ID | name | commentsCount
1 | mysql for dummies | 33
2 | mysql beginners guide | 22
SELECT
...,
commentsCount // will return 33 for first row, 22 for second one
FROM
mycontents
WHERE
name LIKE "%mysql%"
我也想知道所有行的评论总数:
SELECT
...,
SUM(commentsCount) AS commentsCountAggregate // should return 55
FROM
mycontents
WHERE
name LIKE "%mysql%"
但是这个显然会返回一行总数。
现在我想将这两个查询合并为一个,
因为我的实际查询执行非常繁重(它使用布尔全文搜索,子串偏移搜索,而且遗憾的是更多),然后我不想执行它两次
有没有办法在不进行SELECT两次的情况下获得注释总数?
!!欢迎定制功能!!
也欢迎使用变量,我从未使用过它们......
答案 0 :(得分:2)
您可以将中间结果缓存到临时表,然后对此表进行总结
答案 1 :(得分:1)
一个明显的解决方案是使用另一个“临时”表存储中间结果,然后在第二步中执行聚合。
另一个解决方案是准备一个包含所需总和的查找表(但显然需要一些分组ID,我称之为MASTER_ID
),如下所示:
CREATE TABLE comm_lkp AS
SELECT MASTER_ID, SUM(commentsCount) as cnt
FROM mycontents
GROUP BY MASTER_ID
还在列MASTER_ID
上的该表上创建索引。稍后,您可以像这样修改您的查询:
SELECT
...,
commentsCount,
cnt as commentsSum
FROM
mycontents as a
JOIN comm_lkp as b ON (a.MASTER_ID=b.MASTER_ID)
WHERE
name LIKE "%mysql%"
只要查找表格相对较小,它也不应该触及你的表现。
答案 2 :(得分:0)
其中一个ID字段上的GROUP BY可能会起作用。然后,这将为您提供每个ID的SUM(commentsCount)。
您问题中的查询不够详细,无法知道ID字段应该来自哪个字段/表格。