【问题标题】:Mysql query for sum based off a value in a column group by that columnMysql根据该列的列组中的值查询总和
【发布时间】:2014-06-27 20:38:48
【问题描述】:

我是 mysql 新手,需要一些关于我无法弄清楚的 sql 查询的帮助。

我目前有一个表 Transact,其中包含以下内容:

Paytype Amount  Date
Cash    100.0   2013-08-01
Visa    50.00   2013-09-2
Check   50.00   2013-11-12
Cash    75.00   2013-12-01
Cash    50.00   2013-12-19
Visa    100.00  2014-3-01
Cash    20.00   2014-5-20

根据交易日期排序的金额和支付类型,我希望将其查询到一个表格中,该表格给出每种支付类型的金额总和,并按支付类型分组,如下所示:

Paytype Total
Cash    245.00
Visa    100.00
Check   50.00

它基于一个日期范围,所以说我希望它基于 2013 年 12 月 15 日到 2014 年 5 月 1 日。 目前,我可以使用

为特定支付类型提取一笔款项
select paytype, (SUM(IF(paytype = 'Cash', Amount, 0)) from Transact group by paytype.

请帮助执行正确的查询!非常感谢!

【问题讨论】:

  • 这是一个带有where 子句的基本聚合查询。你熟悉 SQL 吗?
  • 你应该把你的查询放在问题中,让这里的人找出不正确的地方。否则人们会认为你不知道,只想让别人来做。
  • 您好,感谢您的回复,我确实将我的查询放在那里。我只知道非常基本的 SQL 查询。我尝试从支付类型的 Transact 组中选择支付类型 SUM(paytype = 'Cash') 作为总计。这只给了我一笔现金。我想我想要类似的东西:选择付款,总金额,其中金额 = SUM(payment = 'SD') 和 SUM(payment='C') 按付款分组;
  • 是的,对不起,我只发现了最后一点,我以为你只写了它的一部分。

标签: mysql sql group-by sum


【解决方案1】:

您可以通过基本的Group BySum 查询来做到这一点:

Select  Paytype, Sum(Amount) As Total
From    Transact
Where   Date Between '2013-12-15' And '2014-05-01'
Group by Paytype

【讨论】:

    【解决方案2】:

    您希望在某个日期间隔内对每种付款类型的金额求和。这可以很直接地转化为 sql(我认为):

    Select Paytype, sum(Amount) as Total
    From Transact
    Where (`Date` between ?start_date
      And  ?end_date)
    Group by Paytype
    

    只需将?start_date?end_date 替换为您要检查的范围即可。

    【讨论】:

    • 谢谢!是的,这实际上非常简单明了,我把它复杂化了。因为如果它只是一个常规的总和(数量),它会对整个列求和吗?所以我认为这行不通,但我想这就是 group by 进来做工作的地方,根据 Paytype 中的不同值将每个人分开..
    • 当您以正确的方式制定它们时,事情就很简单,而且您可以通过实践来学习。我也每天都在学习。
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    相关资源
    最近更新 更多