MYSQL:添加别名并具有操作的字段

时间:2016-10-21 01:09:00

标签: mysql

美好的一天!我想添加字段“duration and dials”

这是我的mysql查询:

select
  u.dialer_display_name,
  u.dialer_ext,
  sum(dl.duration/60) as duration,
  count(dl.dial_id) as dials 
from leads.dial_log as dl 
left join leads.users as u on u.user_id=dl.user_id 
where date(dl.dial_date) = date(now()) 
and u.dialer_display_name != '' 
group by dl.user_id order by dials DESC

所以我想要实现的是添加持续时间和拨号并将它们别名为mets。

类似的东西:

  

选择总和(持续时间+拨号)作为mets

如何构建查询?谢谢!

2 个答案:

答案 0 :(得分:0)

只需添加构成相应列的两个术语:

SELECT u.dialer_display_name,
       u.dialer_ext,
       SUM(dl.duration/60) AS duration,
       COUNT(dl.dial_id) AS dials,
       SUM(dl.duration/60) + COUNT(dl.dial_id) AS mets    -- here is your column
FROM leads.dial_log AS dl 
LEFT JOIN leads.users AS u
    ON u.user_id = dl.user_id 
WHERE DATE(dl.dial_date) = DATE(NOW()) AND
      u.dialer_display_name != '' 
GROUP BY dl.user_id
ORDER BY dials DESC

答案 1 :(得分:-1)

您需要重复逻辑,因为您无法重复使用别名:

select u.dialer_display_name, u.dialer_ext,
       sum(dl.duration/60) as duration,
       count(dl.dial_id) as dials,
       (sum(dl.duration/60) + count(dl.dial_id) ) as mets 
from leads.dial_log dl join
     leads.users u
     on u.user_id = dl.user_id 
where dl.dial_date >= curdate() and
      dl.dial_date < date_add(curdate(), interval 1 day) and
      u.dialer_display_name <> '' 
group by u.dialer_display_name, u.dialer_ext
order by dials DESC;

注意:

  • 使用where的{​​{1}}中的比较已被两次比较所取代。这允许使用索引(如果可用)。
  • date()已替换为date(now())
  • curdate()已修改为与group by
  • 中的列相匹配
  • select已替换为内部联接。 left join条款取消where,因此不会产生误导。
  • 新列已添加。

我还会说left join似乎很奇怪。我怀疑你想要以下之一:

count(dl.dial_id)