mysql - 合并 2 个选择语句

标签 mysql select

我有 2 个 select 语句,想将它们组合起来,以便它们显示在 1 个表格中。

选择 1:

SELECT
LAST_DAY, SUM(BILLABLE), AVG(BILLABLE)
FROM EMPLOYEES
GROUP BY YEAR(LAST_DAY),WEEK(LAST_DAY) ORDER BY LAST_DAY

选择 2:

SELECT BILLABLE 
FROM EMPLOYEES 
WHERE NAME LIKE '$lookup%'

此处的目标是显示所有员工的每周计费金额和平均金额(第一个选择语句),然后添加一个列,其中包含特定“查找”员工该周的计费金额。

这两种陈述单独使用都很好,但如果员工能够轻松地将他们每周的状况与平均值进行比较,这对员工来说会更有意义。

编辑示例:

EMPLOYEE 表看起来像这样

NAME | LAST_DAY | BILLABLE
Bob   05/13/2011   18.5
Mary  05/13/2011   12.68
Steve 05/13/2011   15.2
Bob   05/06/2011   14.1
Mary  05/06/2011   11.17
Steve 05/06/2011   23.62

我希望查询结果看起来像这样:
假设 $lookup == "Bob"

LAST_DAY   | ALL_BILLABLE_TOTAL | ALL_BILLABLE_AVG | EMPLOYEE_BILLABLE_TOTAL
05/13/2011     46.38                15.46                 18.5
05/06/2011     48.89                16.29                 14.1

最佳答案

“查找”行看起来可能是个杂乱无章的东西,所以我质疑你的设计。此外,看起来您的“员工”表实际上并不是员工行,而是每周销售行或其他行。它看起来不像是 3NF,这可能会让你很头疼。无论如何,我认为这会做你想做的:

SELECT
    SQ.last_day,
    SQ.all_billable_total,
    SQ.avg_billable_total,
    LU.billable AS employee_billable_total
FROM
    (
        SELECT
            E.last_day,
            SUM(E.billable) AS all_billable_total,
            AVG(E.billable) AS avg_billable_total,
        FROM
            Employees
        WHERE
            name NOT LIKE '$lookup%'
        GROUP BY
            E.last_day
    ) SQ
LEFT OUTER JOIN Employees LU ON
    LU.name LIKE '$lookup%' AND
    LU.last_day = SQ.last_day

如果您有多行与联接匹配,则与查找行的联接将导致多个结果。如果这只是统计该周销售额的一行,则删除这些行并执行如下操作:

SELECT
    E.last_day,
    SUM(CASE WHEN name = @name THEN E.billable ELSE NULL END) AS all_billable_total,
    AVG(CASE WHEN name = @name THEN E.billable ELSE NULL END) AS avg_billable_total,
    SUM(E.billable) AS employee_billable_total
FROM
    Employees E
WHERE
    E.last_day IN (SELECT last_day FROM Employees WHERE name = @name)
GROUP BY
    E.last_day

您需要在 CASE 语句中使用 NULL,因为使用 0 会偏离平均值。

关于mysql - 合并 2 个选择语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201488/

相关文章:

SQL 选择最近两个月的所有条目

mysql - 选择最受欢迎的商品

mysql - MYSQL中这个WHERE子句有什么问题?

java - 每次将软件分发给新用户时都手动为软件创建新数据库?

mysql - 我如何计算 ON DUPLICATE KEY UPDATE MySQL -php 中更新行的总数

mysql - 优化 MySQL 查询 : long list of IN vs narrowing down search first

mysql - 排除下拉列表中的状态

sed - 从 mysqldump 中按表名获取 INSERT 的行数 - awk、sed、grep

php - 格式化 MySQL 查询的结果,就好像它是从控制台运行的一样

mysql - 根据多个条件获取结果