php - sql查询获取符合条件的记录

标签 php mysql sql

我想为特定公司计算以下内容,即 13:

  1. 总学分
  2. 已用积分
  3. 使用过的电话

我的数据如下图所示。 enter image description here

我计算了 credit_amount(total credit)的总和,它是 200+100+5000+100 = 5400

现在我想计算应该是这样的Used Credit

200 + 100 + 5000 + 70 = 5370

70 来了,因为它来自最后一个包 这是 credit_amount 100 - credit_remaining 30 = 70。

如您所见,recharge_date 如果该日期大于当前日期,则套餐有效。所以当前的事件包是我附上的上面截图中的第一个。

如何找到已使用的积分?

在同一场景中使用的总调用数..它将是

200 / 0.24 = 833.33

100 / 0.24 = 416.667

5000 / 0.20 = 25000

70 / 0.30 = 233.33

所以使用的调用将是上面的总和,大约是26483.33

这是我的查询代码,它没有给出我需要的值:

SELECT (SELECT Sum(credit_amount) 
        FROM   `company_credit` 
        WHERE  `company_id` = 13) AS total_credit, 
       Sum(credit_amount / rate)  AS used_calls, 
       Sum(credit_amount)         AS used_credit 
FROM   `company_credit` 
WHERE  `company_id` = 13 
       AND recharge_date < Now() 
ORDER  BY `id` DESC 

最佳答案

SELECT Sum(credit_amount) AS total_credit, 
       Sum(CASE WHEN recharge_date < Now() THEN (credit_amount / rate) ELSE ((credit_amount-credit_reamining) / rate) END )  AS total_sms, 
       Sum(CASE WHEN recharge_date < Now() THEN credit_amount  ELSE (credit_amount-credit_reamining) END )         AS used_credit 
FROM   `company_credit` 
WHERE  `company_id` = 13 
ORDER  BY `id` DESC 

此查询适用于 company_id = 13。如果您为所有 company_id 计算相同的逻辑,只需删除 WHERE 条件并放置 GROUP BY company_id。您将获得所有公司的计算记录。

尝试上面的查询。

在这里,我只是使用 CASE WHEN 来指定哪些记录有剩余信用。

使用该查询,您最终可以计算出您的 total_sms,used_credit,total_credit

关于php - sql查询获取符合条件的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182041/

相关文章:

mysql - GROUP CONCAT 不适用于子查询 - mysql

php - 保存 CSV 文件而不是下载

mysql - 重定向 FTP 请求

php - 使用 PHP 发出 HTTP/1.1 请求

php - 如果计数器大于 0,则返回 TRUE?

mysql - 将 JOIN 与多个 LIKES 结合使用

sql - 将多行插入表中,只更改一个值

mysql - 在触发器Mysql 5.0中打印消息

php - Laravel 与 Webix 数据表编辑的集成

javascript - 如何配置 nginx 以与 Node.js 和 PHP 配合使用