关于下面的样本表,并牢记以下定义,
我想获得以下mysql查询:
这就是我得到的,它有效,但不完整!
SELECT student, SUM(ceil(cost*(end-start)/3600)) AS expenses FROM schedules GROUP BY student;
AND(这个不起作用,但这个想法实际上是我想达到的目标)
SELECT student, SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHERE paid = 1) AS expenses, SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHERE paid = 0) AS debts FROM schedules GROUP BY student;
我最大的问题是计算从今天到过去的费用以及如果今天的日期大于开始并且付费仍然设置为0的债务
谢谢大家的意见!
样本表
id meta_id start end admin student tutor course cost paid paydate timestamp 18 4 1359867600 1359867690 jnc banjune cameron 2 90 1 1361521193 1359881165 19 4 1360472400 1360472490 jnc banjune cameron 2 90 1 1361521195 1359881165 20 4 1359867600 1359867690 jnc saadcore cameron 2 90 1 1361547064 1359881165 25 6 1359914400 1359919800 jnc johndoe cameron 3 35 1 1361547080 1359893058 26 6 1360000800 1360006200 jnc johndoe cameron 3 35 0 0 1359893058 27 6 1360087200 1360092600 jnc johndoe cameron 3 35 0 0 1359893058
答案 0 :(得分:0)
我得到了理想的解决方案
SELECT
student,
SUM(CASE WHEN paid = 1 AND FROM_UNIXTIME(start) <= now() THEN ceil(cost*(end-start)/3600)
ELSE 0 END) as expenses,
SUM(CASE WHEN paid = 0 AND FROM_UNIXTIME(start) <= now() THEN ceil(cost*(end-start)/3600)
ELSE 0 END) as debts
FROM schedules
GROUP BY student;