繁体   English   中英

SQL查询从同一字段中求和2

[英]SQL query to make 2 sums from the same field

我试图通过“ created_at”字段的年份获取“类型” = 1且类型= 2的总“金额”。

这是桌子

+-----------------+------------------+------+
| Field           | Type             | Null | 
+-----------------+------------------+------+-----
 | id              | int(10) unsigned | NO   | 

 | type            | int(10) unsigned | YES  |

 | type            | varchar(255)     | NO   | 
| amount          | double(11,2)     | NO   |                           
| created_at      | timestamp        | YES  |
| updated_at      | timestamp        | YES  |   

这是我的代码(仅给出type = 1的总数):

DB::select(
        'SELECT 
                year, 
                created_at,
                type,
                SUM(amount) AS total
          FROM 
              (SELECT 
                YEAR(created_at) AS year, 
                amount, 
                created_at, 
                type 
              FROM table 
              WHERE type= 1) AS t 
          GROUP BY year, type
          ORDER BY year;
    ');

在此先感谢您的帮助。

您只需要一个简单的查询即可。 以日期中的年份为基础,对金额进行总计并按年份和类型分组。 仅供参考,您在问题中type了两次作为字段。 这是不可能的,所以我假设第二次它实际上是另一个字段名称。

SELECT
    YEAR(created_at) AS year, 
    type,
    SUM(amount) AS amount
FROM mytable 
GROUP BY YEAR(created_at), type
ORDER BY YEAR(created_at)

演示

我怀疑您真的想要条件聚合:

SELECT YEAR(created_at) AS year, 
       SUM(CASE WHEN type = 1 THEN amount ELSE 0 END) as amount_1,
       SUM(CASE WHEN type = 2 THEN amount ELSE 0 END) as amount_2
FROM table 
GROUP BY YEAR(created_at);

您的问题需要进一步澄清,但我认为您想将每年创建的类型1的金额与每年的总金额进行比较。

select year(created_at), created_at, type,
       sum(case when type =1 then amount else 0 end) as type1amount,
       sum(amount) over (partition by year(created_at)) as yeartotal
from table
group by 1,2,3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM