【问题标题】:How to calculate percentage from two tables?如何从两个表中计算百分比?
【发布时间】:2018-08-31 11:48:37
【问题描述】:

请帮我计算两张表格中客户数量的百分比,这些表格在 2018 年 1 月 1 日至 2018 年 1 月 5 日期间付款。

clients

client_id  sum     date
100      2400   01.01.2018
101      2550   02.01.2018
120      2345   05.01.2018
155      5526   30.03.2018

第二张桌子

payments 

client_id   total  date
100        47    01.01.2018
101        50    02.01.2018
120        0    05.01.2018
155        20    30.03.2018

我写了这样的查询,但它不能正常工作:

SELECT (COUNT(distinct payments.client_id) / (COUNT(distinct 
clients.client_id)) * 100) AS percent, payments.date 
FROM payments, clients WHERE
payments.date between '2018-01-01' 
and '2018-01-05' 
GROUP BY
(payments.date);

谢谢!

【问题讨论】:

  • 从不FROM 子句中使用逗号。 始终使用正确、明确、标准JOIN语法。
  • 今日提示:切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接。
  • 这似乎与 jquery 无关。不要仅仅因为它是整个应用程序的一部分而添加标签。仅当它们实际上与问题中的代码相关时才添加它们。谢谢。在撰写本文时,有一个待修改的编辑将删除该标签。

标签: mysql sql database select


【解决方案1】:

使用加入,我认为您想根据日期计算总付款百分比

SELECT p.date ,
( sum(p.total) /sum(c.sum)) * 100.00) AS percent
FROM payments p join  clients  c on p.client_id=c.client_id
WHERE
p.date between '2018-01-01' 
and '2018-01-05' 
GROUP BY
p.date

【讨论】:

    【解决方案2】:

    更新

    计算付款与客户的比例。我没有看到如何使用 JOIN 来完成。

    SELECT 100 * COUNT(DISTINCT p.id) / (SELECT COUNT(*)
                                         FROM clients 
                                         WHERE date between '2018-01-01' and '2018-01-31') as 'Percent' 
    FROM Payments p
    WHERE p.date between '2018-01-01' and '2018-01-31'
    

    计算每个表的总和 将两个表连接到 client_id 和 date

    SELECT 100 * SUM(p.total) / SUM(c.sum) as 'Percent'
    FROM Payments p
    JOIN clients c ON p.client_id = c.client_id AND p.date = c.date
    WHERE p.date between '2018-01-01' and '2018-01-05'
    

    百分比
    2.1933

    如果你想按日期添加 GROUP BY

    SELECT p.date as 'Date', 100 * SUM(p.total) / SUM(c.sum) as 'Percent'
    FROM Payments p
    JOIN clients c ON p.client_id = c.client_id AND p.date = c.date
    WHERE p.date between '2018-01-01' and '2018-01-05' 
    GROUP BY p.date
    

    日期百分比
    2018-01-01 1.9583
    2018-01-02 1.9608
    2018-01-05 2.6866

    【讨论】:

    • 谢谢)有没有可能在一个查询中使用 COUNT (DISTINCT) 来做到这一点?因为我需要唯一ID的总和
    • 对不起,我不明白。我向查询展示,因为我不确定您想要哪个结果以及“唯一 id 的总和”以及使用 Count 而不是 Sum 是什么意思?
    • 也许我错了,我需要计算在特定日期付款的客户百分比。在这种情况下 100%。但如果有人不支付 - 这个百分比会更低。这样做更好吗?
    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2015-01-02
    相关资源
    最近更新 更多