我试图对表中的列求和,然后将每个列和值作为单独的行返回,但前提是总和大于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/

10-12 21:35