我从mySQL数据库中提取了一组注释类型及其总数。结果集如下所示:
ID - NAME - TOTAL
0 - 一般 - 4
3 - 有意义 - 9
4 - MISC - 5
然而,在我输出给最终用户时,我想总结GENERAL和MISC的总数,ID 0和4.我应该如何有效地做到这一点?我看到的问题是ID 0可能不在每个结果中,而ID 4也是如此。
有什么建议吗?
我的查询是:
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
所以我的最终用户结果应如下所示:
GENERAL / MISC - 9
意思是 - 9
答案 0 :(得分:2)
尝试此查询 -
SELECT
IF(name = 'GENERAL' OR name = 'MISC', 'GENERAL/MISC', name) new_name
, SUM(total)
FROM
comments
GROUP BY
new_name
您可以编写自定义new_name
字段。
答案 1 :(得分:1)
我会让你和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)
我将您的LEFT JOIN
更改为JOIN
,因为我们只计算带有类型的评论。
假设fk_type_id
上有索引,您可以改进此查询,方法是将'MISC'类型设置为'1'而不是类型'4',这样您就可以执行类似a.fk_type_id < 2
而不是a.fk_type_id = 0 OR a.fk_type_id = 4
的操作{1}})和a.fk_type_id > 1
代替a.fk_type_id <> 0 AND a.fk_type_id <> 4
。
如果您正在使用索引而不是扫描行,则执行两个返回不同结果的单独查询不会影响性能。
答案 2 :(得分:0)
这将汇总GENERAL和MISC的多个条目
SELECT SUM(TOTAL) FROM tablename WHERE NAME='GENERAL' OR NAME='MISC';