【问题标题】:Adding extra column and row to count sum() of each table row and column in Mysql在Mysql中添加额外的列和行来计算每个表行和列的sum()
【发布时间】:2021-10-17 05:17:53
【问题描述】:

目前我在 mysql 中有 2 个表,它们是列表表和代理表。 listings 表包含所有状态、refno 和与该特定产品一起使用的 agent_id。现在这些代理的名称存储在我的代理表中。因此,要使用特定列表引用代理名称,我使用inner join 代理表并检查agent_id = id 所在的所有条目。这给了我正确的输出。

现在我正在使用它们各自的代理检索每个产品的所有状态计数:

select SUM(t.status = 'D' ) AS draft,
    SUM(t.status = 'N' ) AS unpublish,
    SUM(t.status = 'Y' ) AS publish,
    SUM(t.status = 'S' ) AS sold,
    SUM(t.status = 'T' ) AS let, c.name
    FROM listings t INNER JOIN agents c ON t.agent_id = c.id
    GROUP BY t.agent_id

但现在我想要一个额外的行和列来计算每行和每列中的数据总数。 像这样的:

dbfiddle 链接:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=f1f7ce90a0562b75f62641272ccf1a93

【问题讨论】:

  • 你确定你使用的是MySql吗?
  • 是的,它在我的 phpmyadmin 中显示 mysqli
  • 如果是 MySql,那么 WITH ROLLUP 应该可以工作。执行select @@version; 确定。
  • 上面写着 10.4.21-MariaDB
  • 在 MariaDB 中使用 ROLLUP。

标签: mysql


【解决方案1】:

简单地将当前的 5 个布尔表达式相加:

SELECT
    COALESCE(c.name, 'Total') AS name,
    SUM(t.status = 'D') AS draft,
    SUM(t.status = 'N') AS unpublish,
    SUM(t.status = 'Y') AS publish,
    SUM(t.status = 'S') AS sold,
    SUM(t.status = 'T') AS let,
    SUM(t.status = 'D') + SUM(t.status = 'N') + SUM(t.status = 'Y') +
    SUM(t.status = 'S') + SUM(t.status = 'T') AS Total
FROM listings t 
INNER JOIN agents c
    ON t.agent_id = c.id
GROUP BY
    t.agent_id
WITH ROLLUP;

【讨论】:

  • 是的,好吧,所以这给了我按行计算的总和,但我也希望按列计算。在同一个声明中是否有可能
  • 哎呀误读了您的要求,在这种情况下您必须对布尔表达式求和。
  • 那么在同一个语句中是否可能有一个列总计?
  • 我不明白你的评论。
  • 因此,如果您看到我在问题中添加的图片,最后一行也显示了按列计算的总数,我正在尝试获取
猜你喜欢
  • 2022-10-02
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
相关资源
最近更新 更多