mysql - MySQL 查询中的子选择

标签 mysql select subquery

我想在查询中为 3 个变量添加别名:total_time_takenaveragerequest_count

平均值旨在计算total_time_taken/request_count以返回平均值,但它给了我一个语法错误

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

最佳答案

我不明白子查询的意义,为什么不直接取每个工程师聚合的总和呢?另外,您正在使用 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

关于mysql - MySQL 查询中的子选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180603/

相关文章:

mysql - 如何改进/简化具有大量子查询的查询?

mysql - 在 MySQL 和 Oracle 数据库之间传输数据

php - 哪种方式加载MySQL数据库比较好?

MySQL - 查询以获取特定字符为非英语的所有行

mysql - 选择与建议的唯一索引冲突的 MySQL 记录

sql - 如果丢失,PostgreSQL 使用前一行的值

mysql - SQL查询: join

mysql - 错误#1046 : Data too long for column but both source and destination columns are of type char(1)

Jquery-获取表中第一个td的值

mysql - 使用 OR 和 ORDER BY/LIMIT 从多个表进行高效的多个子查询