【问题标题】:How can I achieve pivot table output in MySQL?如何在 MySQL 中实现数据透视表输出?
【发布时间】:2022-07-28 01:04:44
【问题描述】:

如果我的 MySQL 表看起来像这样:

如何编写 mysql 查询以获得如下输出:

userid        total_entries      products_sold
------------------------------------------------------------------
204           1011               1500
195           785                350

我们的想法是,我们希望获得每个用户的总条目数和销售的产品总和。我不确定这是否称为数据透视表,但有人建议这样做?帮我写mysql查询,如果列中也有日期,我们要获取今天的条目。

【问题讨论】:

  • “Pivot”是正确的数据库概念。用你的桌子来完成它看起来像:SELECT userid, COUNT(*) as total_entries, SUM(CASE WHEN name = 'products_sold' THEN (value * 1) END as products_sold FROM yourtable GROUP BY userid;
  • 感谢 JNevill 的回复,但就我而言,userid 不是一列。我无法在此字段上分组。
  • 明白了。假设第一列 (sid?) 与 userid 的比例为 1:1,则使用相同的 CASE 逻辑可能是有意义的。 SELECT SUM(CASE WHEN name = 'userid' THEN (value*1) END as userid, ... 这是 EAV 设计的缺点之一;您的 SQL 往往会变得丑陋。
  • 你使用的是什么版本的 MySQL?

标签: mysql sql pivot-table entity-attribute-value


【解决方案1】:

您可以对每个属性进行自联接。我对此有所猜测,因为您的示例数据与您显示的结果不匹配。

SELECT u.value AS userid,
  t.value AS total_entries,
  s.value AS products_sold
FROM mytable AS u
LEFT JOIN mytable AS t USING (sid)
LEFT JOIN mytable AS s USING (sid)
WHERE u.name='userid'
  AND t.name='total_entries'
  AND s.name='products_sold';

【讨论】:

    猜你喜欢
    • 2011-12-02
    相关资源
    最近更新 更多