MySQL - 将列转换为行

时间:2014-02-13 22:17:24

标签: mysql

我正在尝试对表中的列求和,然后将每列和值作为单独的行返回,但仅当总和为>这是一个示例表

…   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

有什么建议吗?

1 个答案:

答案 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根据请求删除结果中的小部件列。

仅适用于少量原始列 - 对于更多数量的列,您可能不希望这样做。