【发布时间】:2014-11-25 09:47:35
【问题描述】:
我需要将 3 个表连接到一个表中。这是场景。
表1:有user_id、app_id
表 2:有 user_id、gender
表 3:有 app_id、app_name(PC、Mobile)
表 4:有 user_id、user_city
现在我正在寻找按城市分组的移动男性、移动女性、PC 男性、PC 女性的用户数。
这是我的 SQL。但是,我想我在连接上做错了。请纠正我。
SELECT
t4.user_city,
sum(case when t2.gender = 'm' and t3.app_name = 'PC' then 1 else 0 end) pcmale,
sum(case when t2.gender = 'f' and t3.app_name = 'PC' then 1 else 0 end) pcfemale,
sum(case when t2.gender = 'm' and t3.app_name = 'Mobile' then 1 else 0 end) mobilemale,
sum(case when t2.gender = 'm' and t3.app_name = 'Mobile' then 1 else 0 end) mobilefemale,
FROM
table1 t1
inner join
table2 t2 on t1.user_id = t2.user_id
inner join
table3 t3 on t1.app_id = t3.app_id
inner join
table4 t4 on t1.user_id = t4.user_id
GROUP BY 1
我们可以按照我在查询中所做的方式将多个表连接到一个表中吗?请帮忙
【问题讨论】:
-
它运行。我只是不确定我是否做得正确并得到正确的结果。您是否发现将多个表连接到 t1 表的方法存在任何问题?
-
移动女性应该检查 f,你正在检查 m,组应该在 t4.user_city
-
那么你得到了什么结果?
-
@radar 组已经在 t4.user_city
-
连接似乎是正确的,除此之外,正如 Rob Paller 已经提到的,由于使用了 INNER JOIN,一些数据可能会丢失。考虑将逻辑转移到 LEFT OUTER JOIN。为什么你认为连接不正确?如果您收到一些不正确的结果,那么提及确切的问题会有所帮助。