五个人一起吃饭, 每次吃饭都是随机某个人掏钱,每次吃饭不一定五个人都来(可能某些人不来,这是重点),每30天算一次账,如何算出每个人应该掏多少钱!表如何设计?sql怎么写?
这是最近面试碰到的题!感觉挺有意思,自己对sql不是很了解,想了两天没有结果,求大神帮忙,谢谢!
五个人一起吃饭, 每次吃饭都是随机某个人掏钱,每次吃饭不一定五个人都来(可能某些人不来,这是重点),每30天算一次账,如何算出每个人应该掏多少钱!表如何设计?sql怎么写?
这是最近面试碰到的题!感觉挺有意思,自己对sql不是很了解,想了两天没有结果,求大神帮忙,谢谢!
问题的点在于每次饭的钱不一样,
这儿有一个解决办法,设计三张表
person表,包括字段 personId,name,age,des....,
record表,包括字段 recordId,time ,money,...
person_record_link表,包括p_r_Id,personId,recordId
然后每次吃饭,都向person_record_link中插入记录,每30天根据personId统计每个人应该付的钱
按照 E-R 原则来设计就行了呀,有两种实体(Entity)——人和饭,有一种多对多关系(Relation)——吃。
具体细化了么,就是楼上说的那样。如果有一个人没来,这个人就不会出现在这个关系里。
吃饭表:
id
uid 用户的id
eat_time 吃饭时间
money 用了多少钱?
person_total 吃饭的人数
paymoney 付了多少钱?(当次会钱的,值与money字段相同,没有会的,记作0)
用户表:
uid 用户的id
name 姓名
.....
计算的时候只需要:
select name,(sum(money/person_total)-sum(paymoney)) as shallpay from 吃饭表 left join 用户表
where eat_time >月初 and eat_time<月末 group by uid;
3 回答1.6k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
3 回答1.6k 阅读
2 回答967 阅读✓ 已解决
闲着没事搞了一下,欢迎指教。。
用户表:
吃饭记录表:
吃饭人员流水表:
造数据:
获取没人月底应付金额: