MySQL从同一个表中提取数据,SUM条件有多个列

时间:2013-11-26 18:30:15

标签: mysql select

我创建了一个包含姓名和电话号码(用户)的用户表。

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 pricedestination列,以查找SUM不匹配的日志记录允许的数字表,以便我知道不在允许列表中的呼叫费用。

然后我想选择price destination列的users number | SUM(price) of allowed calls | SUM(price) of calls not allowed 作为{{1}} DO匹配的日志记录 允许的号码表,以便我知道允许的呼叫费用是多少。

有没有办法可以在带有子查询的单个查询中执行此操作,并且为了实现此结果集,只需要所有这些:

{{1}}

谢谢!

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;