[英]How to efficiently group, sum and sort this mysql result?
I'm pulling a grouping of comment types and their totals from a mySQL database. 我正在从mySQL数据库中提取一组注释类型及其总数。 The result set looks like:
结果集如下所示:
ID - NAME - TOTAL
ID-NAME-TOTAL
0 - GENERAL - 40-一般-4
3 - MEANINGFUL - 93 - 有意义 - 9
4 - MISC - 54 - MISC - 5
In my output to the end user, however, I want to sum the totals for GENERAL and MISC, IDs 0 and 4. How should I efficiently do this? 但是,在我输出给最终用户时,我想总结GENERAL和MISC的总数,ID 0和4.我应该如何有效地执行此操作? The problem I'm seeing is that ID 0 might not be in every result and the same thing for ID 4.
我看到的问题是ID 0可能不在每个结果中,而ID 4也是如此。
Any suggestions? 有什么建议么?
My query is: 我的查询是:
SELECT a.fk_type_id as ID, count(a.fk_type_id) as TOTAL, b.vch_name as NAME
FROM comments a
LEFT JOIN comments_types b ON a.fk_type_id = b.id
WHERE a.entry = X
GROUP BY a.fk_type_id
So my end-user result should look like: 所以我的最终用户结果应如下所示:
GENERAL/MISC - 9
GENERAL / MISC - 9
MEANINGFUL - 9意思是 - 9
Try this query - 试试这个查询 -
SELECT
IF(name = 'GENERAL' OR name = 'MISC', 'GENERAL/MISC', name) new_name
, SUM(total)
FROM
comments
GROUP BY
new_name
You may write your custom new_name
field. 您可以编写自定义的
new_name
字段。
I would make it easy on you and MySQL and split it out like this: 我会让你和MySQL很容易,并将它拆分成这样:
(SELECT a.fk_type_id as ID, COUNT(a.fk_type_id) as TOTAL, b.vch_name as NAME
FROM comments a
JOIN comments_types b ON a.fk_type_id = b.id
WHERE a.entry = X AND a.fk_type_id <> 0 AND a.fk_type_id <> 4
GROUP BY a.fk_type_id)
UNION ALL
(SELECT a.fk_type_id as ID, COUNT(a.fk_type_id) as TOTAL, 'GENERAL/MISC' as NAME
FROM comments a
JOIN comments_types b ON a.fk_type_id = b.id
WHERE a.entry = X AND (a.fk_type_id = 0 OR a.fk_type_id = 4)
GROUP BY a.fk_type_id)
I changed your LEFT JOIN
to JOIN
because we're only counting comments with a type. 我将
LEFT JOIN
更改为JOIN
因为我们只计算带有类型的注释。
You might improve this query, assuming an index on fk_type_id
, by making 'MISC' type '1' instead of type '4', so you could do something like a.fk_type_id < 2
instead of ( a.fk_type_id = 0 OR a.fk_type_id = 4
) and a.fk_type_id > 1
instead of a.fk_type_id <> 0 AND a.fk_type_id <> 4
. 假设
fk_type_id
上的索引,通过使'MISC'类型'1'而不是类型'4',您可以改进此查询,因此您可以执行类似a.fk_type_id < 2
而不是( a.fk_type_id = 0 OR a.fk_type_id = 4
)和a.fk_type_id > 1
而不是a.fk_type_id <> 0 AND a.fk_type_id <> 4
。
If you're utilizing indexes instead of scanning rows, performing two separate queries that return different results won't affect performance. 如果您正在使用索引而不是扫描行,则执行两个返回不同结果的单独查询不会影响性能。
这将汇总GENERAL和MISC的多个条目
SELECT SUM(TOTAL) FROM tablename WHERE NAME='GENERAL' OR NAME='MISC';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.