mysql - 有没有办法在不使用子查询的情况下检索聚合值和非聚合值?

标签 mysql sql

我有一个下表:

trade_id |股票代码 |日期 |金额

该表包含我进行的所有交易。我想知道我上周赚到的金额以及每只股票的总金额。

股票代码 |第 1 周金额 |剩余金额

例如:

1 | A | 2013-01-01 | 200 
2 | A | 2013-06-25 |-100 
3 | B | 2013-06-25 | 100 
4 | C | 2013-04-01 | 100 

今天是我们本地时间 2013 年 6 月 26 日,所以我应该得到:

A |-100 | 100
B | 100 | 100
C | 0   | 100 

我以为这不是什么难事,但我写了一个complex subquery像这样:

SELECT lst_week.stock_code, 
       lst_week.amount_in_lst_week, 
       total.amount_remaining 
  FROM (SELECT t1.stock_code, 
               SUM(COALESCE(t2.amount, t2.amount, 0)) AS amount_in_lst_week 
          FROM trade t1
     LEFT JOIN trade t2 ON t1.trade_id = t2.trade_id 
                       AND TO_DAYS(NOW()) - TO_DAYS(t1.date) <= 7
      GROUP BY t1.stock_code) lst_week,
       (SELECT stock_code, SUM(amount) AS amount_remaining 
          FROM trade
      GROUP BY stock_code) total 
 WHERE lst_week.stock_code = total.stock_code;

它有效,但我想知道是否可以不使用子查询来做到这一点?或者任何更简单的方法?谢谢。

最佳答案

这个怎么样:

select 
     Stock_code
    ,[1st week] = sum(case when [date] >= getDate()-7 then amount else 0 end)
    ,remainder = sum(amount)
from data
group by Stock_code

关于mysql - 有没有办法在不使用子查询的情况下检索聚合值和非聚合值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17310615/

相关文章:

java - 使用 jdbc 连接 MySQL 时出错 |命名异常

mysql - 无法让 Scala、Slick 和 MySQL 协同工作

mysql - 在 MySQL 存储过程中处理中间结果

mysql建表时报错1064。我可以检查什么?

sql - 两个sql查询的性能差异?

sql - Oracle存储过程中的UNION

python - python和mysql中的矩阵乘法

java - JPA,将复杂数据类型放在同一个表的实体内

sql - Ruby on Rails : joining two tables on something other than the standard foreign key

php - find_in_set() 没有找到所有值