表join和group by id mysql
以下是场景:表join和group by id mysql,mysql,sql,Mysql,Sql,以下是场景: 我想从表1中获取客户名称 通过id连接表2 从表2中选择所有付款日期 按年份分组 只是解释一下,代码和名称键属于表1 paymentDate,金额键位于表2,但它们共享外键uniqueId键 预期结果应该是这样的: [{ "code": 1011, "name": "Customer1", "amount": 5000, "paymentDate": "2016-10-20T04:00:00.000Z" "paymentDate": "2016-11-20T04:00:00.000
[{
"code": 1011,
"name": "Customer1",
"amount": 5000,
"paymentDate": "2016-10-20T04:00:00.000Z"
"paymentDate": "2016-11-20T04:00:00.000Z"
"paymentDate": "2016-12-20T04:00:00.000Z"
},
{
"code": 1012,
"name": "Customer2",
"amount": 5000,
"paymentDate": "2016-03-20T05:00:00.000Z"
"paymentDate": "2016-04-20T05:00:00.000Z"
"paymentDate": "2016-05-20T05:00:00.000Z"
"paymentDate": "2016-06-20T05:00:00.000Z"
},
{
"code": 1013,
"name": "Customer3",
"amount": 5000,
"paymentDate": "2016-01-20T05:00:00.000Z"
"paymentDate": "2016-02-20T05:00:00.000Z"
}]
到目前为止,我有:
SELECT coreObjects.code,
coreObjects.name,
lateobjectpayments.amount,
lateobjectpayments.paymentDate
FROM coreObjects
JOIN lateobjectpayments
ON coreObjects.uniqueId=lateobjectpayments.uniqueId
GROUP BY YEAR(lateobjectpayments.paymentDate)
似乎我需要在连接附近进行多选,但到目前为止还没有我想要的。如果有人能帮助我,我将不胜感激 问题在于不能在单个GROUPBY语句中混合GROUPBY聚合(将多个原始元组合并为一个结果元组)和细节选择(需要所有原始元组)。 如果您使用一个子句
按年份分组(lateobjectpayments.paymentDate)
编写查询,那么每年的结果最多包含一个元组,并且只有一个customer和paymentDate与这样的结果元组相关联
因此,将查询拆分为子查询;一个用于获取每个uniqueId
和年的聚合值(即金额
),另一个用于“获取”详细信息:
select c.*, aggr.amount, lop.*
from (select uniqueId, year(paymentDate) as year, sum(amount) as amount from
lateobjectpayments
group by uniqueId, year(paymentDate)) aggr
join coreObjects c on c.uniqueId = aggr.uniqueId
join lateobjectpayments lop on year(lop.paymentDate)=aggr.year and lop.uniqueId = aggr.uniqueId
请注意,sql结果是表格形式,而不是半结构化的,例如json。但是,在您选择的任何编程语言中,从表格形式导出半结构化形式都应该很容易。在您的示例中,我没有看到您每年都在进行分组。这就是您一直在思考的问题吗?实际上,查询中缺少按年份分组,但仍然没有;t告诉我我想要什么您当前的输出是什么?上面查询的输出是每个客户乘以paymentDate,所以假设一个客户有4个付款日期,我有4个结果的输出,每个结果都有一个付款日期和上面的其他详细信息。我们的想法是获得客户在一年内支付的所有款项,基本上我需要客户的姓名和表1中的代码,然后将表2中的所有付款日期附加到该客户,然后需要按年份分组,因为客户可能在2016年支付了4次,在2017年支付了2次