我学习和练习sql大约有6个月了。我已经准备好投入并承认我对此很愚蠢,而且我的大脑无法理解它的大多数模式。我正在尝试创建一个数据透视表。关于这个主题的简单文献并不多,我找到的唯一一个来源谈到了创建多维数据集和基本的实体属性值 (EAV) 逻辑。无论这意味着什么。
name action pagecount
-------------------------------
Company A PRINT 3
Company A PRINT 2
Company A PRINT 3
Company B EMAIL 6
Company B PRINT 2
Company B PRINT 2
Company B PRINT 1
Company A PRINT 3
我想对name
列与action
列的总计数和pagecount<列的总计数进行交叉制表(这是正确的术语吗?)/
name action_PRINT action_EMAIL pagecount_PRINT pagecount_EMAIL
--------------------------------------------------------------------------------
Company A 4 0 11 0
Company B 3 1 5 6
最佳答案
这种类型的操作称为PIVOT
,但 MySQL 没有枢轴函数,因此您需要使用聚合函数和 CASE
语句来复制它.
您可以使用以下内容来生成结果:
select name,
sum(case when action = 'PRINT' then 1 else 0 end) action_print,
sum(case when action = 'EMAIL' then 1 else 0 end) action_email,
sum(case when action = 'PRINT' then pagecount else 0 end) pagecount_print,
sum(case when action = 'EMAIL' then pagecount else 0 end) pagecount_email
from yourtable
group by name
结果将是:
| NAME | ACTION_PRINT | ACTION_EMAIL | PAGECOUNT_PRINT | PAGECOUNT_EMAIL |
-------------------------------------------------------------------------------
| Company A | 4 | 0 | 11 | 0 |
| Company B | 3 | 1 | 5 | 6 |
关于mysql - 多列交叉制表又名枢轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696613/