我创建了一个包含姓名和电话号码(用户)的用户表。
id| name | phone
1 | Frank | 0345221234
2 | Sara | 0342555939
我有另一个表,其中包含一个日志,用户调用不同的号码(call_logs):
number | destination | price
0345221234 | destination | x /// This is Frank
0345221234 | destination | y /// This is also Frank
0342555939 | destination | z /// This is Sara
然后我有一个表格,其中包含Frank和Sara可以拨打的号码(allowed_numbers):
number
033485733
045727728
082358288
我想循环访问我的用户表并根据他们的号码检查调用日志表,并选择SUM
price
列destination
列,以查找SUM
不匹配的日志记录允许的数字表,以便我知道不在允许列表中的呼叫费用。
然后我想选择price
destination
列的users number | SUM(price) of allowed calls | SUM(price) of calls not allowed
作为{{1}} DO匹配的日志记录
允许的号码表,以便我知道允许的呼叫费用是多少。
有没有办法可以在带有子查询的单个查询中执行此操作,并且为了实现此结果集,只需要所有这些:
{{1}}
谢谢!
答案 0 :(得分:2)
SELECT call_logs.number
,SUM(IF(allowed_numbers.number IS NOT NULL,call_logs.price,0)) AS AllowedPrice
,SUM(IF(allowed_numbers.number IS NULL,call_logs.price,0)) AS NotAllowedPrice
FROM call_logs
LEFT JOIN allowed_numbers
ON call_logs.destination = allowed_numbers.number
GROUP BY call_logs.number;