Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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 如何合并同一联接表中的两个sql计数_Mysql - Fatal编程技术网

Mysql 如何合并同一联接表中的两个sql计数

Mysql 如何合并同一联接表中的两个sql计数,mysql,Mysql,又是一个讨厌的学生! 今天,我花了数小时试图将(选择)2个已加入的SQL输出+原始表的ID组合到单个表输出中。最终导致此查询: SELECT * FROM( SELECT fd1.User_idUser,avg(fd1.caloryIntake) AS 'workdays' FROM fact_dailysnapshot fd1 INNER JOIN dim_day dd1 ON dd1.DATE_SK = fd1.DATE_SK WHERE dd1.weekend_ind = 'N' GRO

又是一个讨厌的学生! 今天,我花了数小时试图将(选择)2个已加入的SQL输出+原始表的ID组合到单个表输出中。最终导致此查询:

SELECT * FROM(
SELECT fd1.User_idUser,avg(fd1.caloryIntake) 
AS 'workdays'
FROM fact_dailysnapshot fd1
INNER JOIN dim_day dd1 ON dd1.DATE_SK = fd1.DATE_SK
WHERE dd1.weekend_ind = 'N'
GROUP BY fd1.User_idUser 
ORDER BY fd1.User_idUser) A,

(SELECT avg(fd1.caloryIntake) AS 'weekend'
FROM fact_dailysnapshot fd1
INNER 
JOIN dim_day dd1 ON dd1.DATE_SK = fd1.DATE_SK
WHERE dd1.weekend_ind = 'Y'
GROUP BY fd1.User_idUser 
ORDER BY fd1.User_idUser) B;
翻译成…


现在这是一个错误的结果,第二列为所有用户条目提供了一个几乎恒定的值。我认为这必须通过某种额外的连接来解决,但我真的没有想法了。提前谢谢

如果我理解正确,这就是您要寻找的:

SELECT A.User_idUser, A.workdays, B.weekend 

FROM (

    SELECT fd1.User_idUser, avg(fd1.caloryIntake) AS 'workdays'
    FROM fact_dailysnapshot fd1
    INNER JOIN dim_day dd1 
       ON dd1.DATE_SK = fd1.DATE_SK
    WHERE dd1.weekend_ind = 'N'
    GROUP BY fd1.User_idUser 
    ORDER BY fd1.User_idUser) A

JOIN 
    (SELECT fd1.User_idUser, avg(fd1.caloryIntake) AS 'weekend'
    FROM fact_dailysnapshot fd1
    INNER JOIN dim_day dd1 
       ON dd1.DATE_SK = fd1.DATE_SK
    WHERE dd1.weekend_ind = 'Y'
    GROUP BY fd1.User_idUser 
    ORDER BY fd1.User_idUser) B

    ON A.User_idUser = B.User_idUser

每个查询都会按ID及其工作日或周末向您提供所有用户。您需要将对用户ID的两个查询的结果合并。

您的
JOIN
缺少一个
on
子句来关联d
user\u idUser

但是,编写查询的最简单方法是使用条件聚合:

SELECT fd1.User_idUser,
       avg(case when dd1.weekend_ind = 'N' then fd1.caloryIntake end) as weekday_avg,
       avg(case when dd1.weekend_ind = 'Y' then fd1.caloryIntake end) as weekend_avg
FROM fact_dailysnapshot fd1 INNER JOIN
     dim_day dd1
     ON dd1.DATE_SK = fd1.DATE_SK
GROUP BY fd1.User_idUser 
ORDER BY fd1.User_idUser;

这是一个问题,而不是两个问题。

@nicolamassart-见戈登的答案。它比我的好:)他把它简化为一个查询。了解他的所作所为是很好的学习;)我从未使用过条件聚合,但它确实简化了一切。请注意,第一个答案快100毫秒。