【问题标题】:Multiple Select, Count and Where Statements in MYSQLMYSQL 中的多选、计数和 Where 语句
【发布时间】:2017-06-17 00:58:27
【问题描述】:

我正在尝试生成与图表一起使用的报告,我尝试了许多不同的语句,但无法使其正常工作。

基本上,我希望能够在我的数据库中显示通话记录,按日期分组,并进行计数以提供准确的图片。

| Date     | Answered Calls | Missed Calls | Total Calls |
| 1-1-2016 | 10             | 2            | 12
| 2-1-2016 | 15             | 1            | 16

等等等等

但是,使用下面的语句(这不包括总调用数),我不断得到以下 -

SELECT  (SELECT DATE(`created`)
         FROM   mp_wp_call_report_pstn
        ) AS created_date,

        (SELECT `Extension`
         FROM   mp_wp_call_report_pstn
        ) AS Extension,

        (SELECT COUNT(*)
         FROM   mp_wp_call_report_pstn
         WHERE `Call type` = "Incoming" 
               AND `Extension` != 2504 
               AND `created` >= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
        ) AS CallsAnswered,

        (SELECT COUNT(*)
         FROM   mp_wp_call_report_pstn
         WHERE `Call type` = "Incoming" 
         AND `Extension` = 2504 
         AND `created` >= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
        ) AS CallsRecieved

GROUP BY DATE(`created_date`) 
LIMIT 0, 25

MySQL 说:文档 - #1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在 'GROUP BY 附近使用的正确语法 DATE(created_date) LIMIT 0, 25' at line 22

要接听未接电话,我们只需从已接电话中取出已接电话。

任何建议将不胜感激。

【问题讨论】:

  • 你的 FROM 子句在哪里?
  • 在这种情况下,您应该尝试将查询减少到最小值以使其正常工作。然后开始添加字段,直到找到错误。但是这里你需要一个 FROM

标签: mysql select count group-by


【解决方案1】:

您需要的一切都在一个表中。您不应该使用子查询。

将 date 和 call_type 条件推入 where 子句,并按电话日期分组。

这样的事情应该会让你走上正轨:

select DATE(`created`) as created_date,
  sum((case when (`Extension` != 2504) then 1 else 0 end)) AS CallsAnswered,
  sum((case when (`Extension` = 2504) then 1 else 0 end)) AS CallsReceived,
  count(*) as total_calls
from mp_wp_call_report_pstn
where `created` >= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
  and `Call type` = "Incoming"
group by created_date

【讨论】:

    【解决方案2】:

    您不需要所有这些子查询,只需计算不同的呼叫并按日期和分机分组。

    SELECT DATE(`created`) AS created_date, 
           `Extension`,
           SUM(CASE WHEN `Call type` = "Incoming" 
                         AND `Extension` != 2504 
                         AND `created` >= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
               THEN 1 ELSE 0 END) AS CallsAnswered,
           SUM(CASE WHEN `Call type` = "Incoming" 
                         AND `Extension` = 2504 
                         AND `created` >= DATE_SUB(CURDATE(),INTERVAL 1 MONTH)
                THEN 1 ELSE 0 END) AS CallsRecieved
    FROM mp_wp_call_report_pstn
    GROUP BY DATE(`created`), `Extension`
    LIMIT 0, 25;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多