我正在尝试对表中的列求和,然后将每列和值作为单独的行返回,但仅当总和为>这是一个示例表
… stuff widget toast …
- ----- ------ ----- -
… 0 0 1 …
… 1 0 3 …
… 2 0 1 …
… 0 0 1 …
… 0 0 0 …
总结列很容易
select sum(stuff) as stuff, sum(widget) as widget, sum(toast) as toast from table
产生此输出
stuff widget toast
----- ------ -----
3 0 6
但我真正希望最终得到的是(注意小部件缺失,因为总和为0)
thing count
---- -----
stuff 3
toast 6
有什么建议吗?
答案 0 :(得分:1)
你走了:
SELECT 'stuff' as thing, sum(stuff) `count` FROM foo HAVING `count` > 0
UNION
SELECT 'widget', sum(widget) s FROM foo HAVING s > 0
UNION
SELECT 'toast', sum(TOAST) t FROM foo HAVING t > 0
http://sqlfiddle.com/#!2/b586f/7
第一个SELECT中的别名确定结果的列名,后面的SELECT中的别名无关紧要,因此我使用了短的。
并且具有相应的总和> 0根据请求删除结果中的小部件列。
仅适用于少量原始列 - 对于更多数量的列,您可能不希望这样做。