上个月和总和的总和

时间:2013-02-24 14:02:03

标签: sql zend-framework

我试图在上个月获得用户总数和总数,是否可以在一个查询中获取?我使用zend,但我可以使用提供的sql。

继承了我上个月的总数

$select = $this->_db
            ->select()
            ->from(array('p' => $this->_name), array(
                'user_login',
                'sum' => new Zend_Db_Expr('SUM(p.value)'),
                )
            )
            ->joinLeft(array('u' => 'user'), 'p.user_login = u.login')
            ->group('p.user_login')
            ->where('DATE(when) >= CURDATE() - INTERVAL 30 DAY')
            ->order('sum DESC')
            ;
    return $this->getAdapter()->fetchAll($select);

2 个答案:

答案 0 :(得分:1)

根据我的理解,您希望显示过去30天的总数以及每个用户的所有时间总数;遗憾的是,我无法测试Zend语法,并且我不习惯它,但这里是MySQL所需SQL的一个版本;

SELECT p.user_login, 
  SUM(IF(DATE(`when`) >= CURDATE() - INTERVAL 30 DAY,p.value,0)) sum,
  SUM(p.value) total_sum
FROM user_value p
JOIN user u
  ON u.login = p.user_login
GROUP BY p.user_login
ORDER BY sum DESC;

SQLfiddle for testing

答案 1 :(得分:0)

我相信你的初始查询等同于这个SQL:

SELECT p.user_login, SUM(p.value) as sum_last_month
FROM person p
LEFT JOIN user u ON p.user_login = u.login
WHERE DATE(when) >= CURDATE() - INTERVAL 30 DAY
GROUP BY p.user_login
ORDER BY sum_last_month DESC

我不确定如何使用Zend做这样的嵌套SELECT,但是在SQL中我相信这样的东西会起作用:

SELECT p.user_login, SUM(p.value) as sum_last_month,
    (SELECT SUM(p2.value) FROM person p2 WHERE p2.id = p.id) as total
FROM person p
LEFT JOIN user u ON p.user_login = u.login
WHERE DATE(when) >= CURDATE() - INTERVAL 30 DAY
GROUP BY p.user_login
ORDER BY sum_last_month DESC, total DESC