【问题标题】:how to counting data from each column in MySQL?如何计算 MySQL 中每一列的数据?
【发布时间】:2010-09-17 04:25:36
【问题描述】:

我有一些用于数据透视表的 mysql 脚本,然后计算其中的一些数据:

SELECT A.Line,
       week1.1stweek, week2.2ndweek,
       IFNULL(week1.1stweek,0) + IFNULL(week2.2ndweek,0) AS TOTAL
FROM inspection_report AS A
LEFT JOIN(
           SELECT Line, (SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1)/COUNT(Serial_number) AS 1stweek
           FROM inspection_report
           WHERE DAY(Inspection_datetime) BETWEEN 1 AND 7
           GROUP BY Line, WEEK(Inspection_datetime), YEAR(Inspection_datetime)
          ) AS week1 USING (Line)
LEFT JOIN(
           SELECT Line, (SUM(S) + SUM(A) + SUM(B)*0.4 + SUM(C)*0.1)/COUNT(Serial_number) AS 2ndweek
           FROM inspection_report
           WHERE DAY(Inspection_datetime) BETWEEN 8 AND 14
           GROUP BY Line, WEEK(Inspection_datetime), YEAR(Inspection_datetime)
          ) AS week2 USING (Line)
GROUP BY Line

它使表头显示为按钮。 之后我想在每一列下面做一个“SUM”:

Line          1stweek            2ndweek             total
1               12                 2                   14
2               3                  0                    3
SUM             15                 2                   17

我该怎么做?

【问题讨论】:

    标签: mysql count pivot-table


    【解决方案1】:

    使用WITH ROLLUP 修饰符。

    http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

    你必须修改外部选择语句

    SELECT A.Line,
           sum(week1.1stweek) as 1stweek, sum(week2.2ndweek) 2ndweek,
           sum(IFNULL(week1.1stweek,0) + IFNULL(week2.2ndweek,0)) AS TOTAL
    

    使修饰符生效。如果您需要这样标记,请将 A.Line 更改为 IFNULL(A.Line, "SUM") as Line

    【讨论】:

    • 但它没有计算全部。它只显示每列的最后一个数据。
    • 在使用 IFNULL(A.Line, "SUM") 作为 Line 之后,“SUM”没有显示在下面仍然是“null”。为什么会发生?
    • 你能把你的sql语句现在是什么样子的吗?
    • 我发布了我的数据库结构,所以你可以试试。
    • 我已经找到了答案。在我使用 GROUP BY Line WITH ROLL UP 之前。在我使用 IFNULL(A.Line, "SUM") 作为 Line 并且不要忘记使用 GROUP BY A.Line WITH ROLLUP 之后。
    【解决方案2】:

    这让我很感兴趣,所以我在一个在线 SQL 沙箱中实现了一个等价物,here

    select ifnull(toy, "SUM") as toy, sum(s1.store1) as store2, sum(s2.store2) as store1, sum(ifnull(store1,0)+ifnull(store2,0)) as total from (select toy_id, sum(inventory) as store1 from store_inventory where store_id=1 group by toy_id) as s1 left join (select toy_id, sum(inventory) as store2 from store_inventory where store_id=2 group by toy_id) as s2 using (toy_id) left join toy_info using (toy_id) group by toy with rollup;

    (请原谅我缺乏降价技巧,这是我的第一篇文章。)

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-10
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多