Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 合并2个select语句_Mysql_Select - Fatal编程技术网

Mysql 合并2个select语句

Mysql 合并2个select语句,mysql,select,Mysql,Select,我有两个select语句,希望将它们组合在一起,以便它们显示在一个表中 选择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%' 这里的目标是显示所有员工每周的计费金额和平均值(

我有两个select语句,希望将它们组合在一起,以便它们显示在一个表中

选择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%'
这里的目标是显示所有员工每周的计费金额和平均值(第一个select语句),然后添加一列,其中包含特定“查找”员工该周的计费金额

这两种说法各自都很好,但如果员工能够轻松地将每周的情况与平均情况进行比较,那么对他们来说就更有意义了

编辑以下示例:

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 名称|最后一天|计费 鲍勃2011年5月13日18.5 玛丽2011年5月13日12.68 史蒂夫05/13/2011 15.2 鲍勃2011年6月5日14.1 2011年6月5日11.17 史蒂夫2011年6月5日23.62 我希望查询结果如下所示:
假设$lookup==“Bob”

最后一天|所有|可计费|总计|所有|可计费|平均|员工|可计费|总计 05/13/2011 46.38 15.46 18.5 05/06/2011 48.89 16.29 14.1 “lookup”行的东西看起来像是一个乱七八糟的东西,所以我怀疑你的设计。另外,看起来“Employee”表实际上不是员工行,而是周销售额行或其他。看起来不是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将偏离平均值。

对于每个员工,每周有一行?是。每个员工每周有一个记录。共有约50名Employees。第一个示例非常有效,除了内部select语句中的where子句,它实际上并不需要。我把它拿了出来,查询结果很好。非常感谢你的帮助,不客气。我将删除这部分代码。我原以为你是想为一名员工获取信息。另外请注意。。。我添加了一个检查,这样您就不会计算正常聚合中的“查找”行。如果可以的话,这只是从数据中提取这些行的另一个原因。
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