我试图对表中的列求和,然后将每个列和值作为单独的行返回,但前提是总和大于0。这是一个示例表
… 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
有什么建议吗?
最佳答案
干得好:
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会根据要求消除结果中的小部件列。
不过,这仅适用于少量的原始列-对于更多的列,您可能不想这样做。
关于mysql - MySQL-将列透视成行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21766736/