Mysql 如何合并同一联接表中的两个sql计数
又是一个讨厌的学生! 今天,我花了数小时试图将(选择)2个已加入的SQL输出+原始表的ID组合到单个表输出中。最终导致此查询: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
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
子句来关联duser\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毫秒。