dongqi8114 2014-03-05 12:32
浏览 121

MySQL别名计算

It confuses me.. total left calculation seems doesn't work.

I am trying to get the total voucher and get total used and the total left.

please help.

SELECT 
 (IFNULL(SUM(value), 0)) AS total_voucher,
 (
  SELECT 
    IFNULL(SUM(value), 0))
  FROM 
    voucher_history 
  WHERE 
    idUser = 1 AND isUsed = 1 AND DATE(FROM_UNIXTIME(datetime)) = '2014-03-04'
 )  AS total_used,

 (total_voucher-total_used) AS total_left

FROM 
 voucher_history 
WHERE 
 idUser = 1 AND isUsed = 0 AND DATE(FROM_UNIXTIME(datetime)) <= '2014-03-05'
  • 写回答

1条回答 默认 最新

  • doudeng8691 2014-03-05 12:37
    关注

    You can do this with conditional aggregation, rather than using a subquery:

    SELECT coalesce(SUM(value), 0)) AS total_voucher,
           sum(case when is_used = 1 then value else 0 end) as total_used,
           sum(case when is_used = 1 then 0 else value end) as total_left
    FROM voucher_history 
    WHERE idUser = 1 AND DATE(FROM_UNIXTIME(datetime)) <= '2014-03-05';
    

    Your query has the problem that it is trying to use column aliases (total_voucher and total_used) in the same select statement. SQL does not support this. You would need to use a subquery to get that functionality.

    评论

报告相同问题?

悬赏问题

  • ¥20 易康econgnition精度验证
  • ¥15 线程问题判断多次进入
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致