【问题标题】:Sub selects within MySQL queryMySQL 查询中的子选择
【发布时间】:2017-04-03 09:07:40
【问题描述】:

我想在查询中为 3 个变量设置别名,total_time_takenaveragerequest_count

平均值是为了计算 total_time_taken / request_count 以返回 average 但是它给了我一个语法错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select(created_at, assigned_at, SUM(TIMESTAMPDIFF(SECOND, requests.created_at, r' at line 4

查询如下。

select
    *,
    COUNT(*) as request_count,
    select(created_at, assigned_at, SUM(TIMESTAMPDIFF(SECOND, requests.created_at, requests.assigned_at)) from requests) as total_time_taken,
    total_time_taken / request_count as average
from
    `requests`
where
    `deleted_at` is null
and
    `submitted_at` >= '2017-03-30 00:00:00'
and
    `requests`.`deleted_at` is null
group by
    `engineer_id`
limit 5

【问题讨论】:

  • 你在第二个select前面缺少一个(
  • 子选择需要用()包裹吗? @影子

标签: mysql select subquery


【解决方案1】:

我看不出子查询的意义,为什么不直接取每个工程师汇总的总和?此外,您正在使用GROUP BY 执行SELECT *,这通常不起作用,而且通常是错误的,因为它包含非聚合列。相反,只需选择 engineer_id 或其他一些列的聚合。

SELECT
    engineer_id,
    COUNT(*) AS request_count,
    SUM(TIMESTAMPDIFF(SECOND, created_at, assigned_at)) AS total_time_taken,
    SUM(TIMESTAMPDIFF(SECOND, created_at, assigned_at)) /
    COUNT(*) AS average
FROM requests
WHERE deleted_at IS NULL AND
      submitted_at >= '2017-03-30 00:00:00' AND
      deleted_at IS NULL
GROUP BY engineer_id
LIMIT 5

【讨论】:

  • 得到错误You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT SUM(TIMESTAMPDIFF(SECOND, requests.created_at, requests.assigned_at)) / ' at line 5 但是你已经确定了我想要做的事情。
  • 您可能希望在此查询中使用ORDER BY,因为您使用的是LIMIT。就目前而言,您将返回 5 个任意工程师,可能不是您想要的。
  • 正如我上面提到的,将ORDER BY <something> 添加到查询的末尾,以按照某种顺序获得五名工程师,假设你想要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多