我有 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/