gpt4 book ai didi

mysql - 合并 2 个选择语句

转载 作者:可可西里 更新时间:2023-11-01 08:37:43 25 4
gpt4 key购买 nike

我有 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 | BILLABLEBob   05/13/2011   18.5Mary  05/13/2011   12.68Steve 05/13/2011   15.2Bob   05/06/2011   14.1Mary  05/06/2011   11.17Steve 05/06/2011   23.62

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

LAST_DAY   | ALL_BILLABLE_TOTAL | ALL_BILLABLE_AVG | EMPLOYEE_BILLABLE_TOTAL05/13/2011     46.38                15.46                 18.505/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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com