【问题标题】:SQL - Calculate percentage of filtered SUM fieldsSQL - 计算过滤 SUM 字段的百分比
【发布时间】:2021-01-31 09:54:14
【问题描述】:

我有一张表,其中存储本地商店的销售额,按销售类型和年份划分,并按客户名称分组(只有少数客户)。用户通过 JavaScript 传递这些参数,我应该返回所选年份按销售类型分组的所有销售额。

当前的 SQL 语句返回属于第一种销售类型(即“一般”销售)的不同客户在这些年份分组的所有销售,但我还想检索所选销售的百分比属于每个用户的数量。

桌子:

CREATE TABLE `sales` (
    `id_sale` INT(11) NOT NULL,
    `name_of_client` VARCHAR(50) NOT NULL COLLATE 'latin1_swedish_ci',
    `type_of_sale` TINYINT(1) NOT NULL,
    `year` YEAR NOT NULL,
    `amount` DOUBLE(22,0) NOT NULL,
    PRIMARY KEY (`id_sale`) USING BTREE
)

SQL 语句:

SELECT name_of_client, SUM(amount) 
FROM sales 
WHERE type_of_sale = 1 AND year = 2020 
GROUP BY name_of_client 
ORDER BY SUM(amount) DESC

我在 SO 线程中尝试了其他建议的解决方案,但它们计算表中所有销售额的百分比,我需要每个客户在当前年份和当前销售类型的 SUM(amount) 百分比.

【问题讨论】:

    标签: mysql sql percentage


    【解决方案1】:

    如果我理解正确,这只是条件聚合:

    SELECT name_of_client,
           SUM(CASE WHEN type_of_sale = 1 THEN amount ELSE 0 END) / SUM(amount)
    FROM sales
    WHERE year = 2020
    GROUP BY name_of_client
    ORDER BY SUM(amount) DESC;
    

    如果你每年都想要这个:

    SELECT name_of_client, year,
           SUM(CASE WHEN type_of_sale = 1 THEN amount ELSE 0 END) / SUM(amount)
    FROM sales
    GROUP BY name_of_client, year
    ORDER BY SUM(amount) DESC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      • 2016-07-02
      • 1970-01-01
      相关资源
      最近更新 更多