sql,内连接和查询结果,可能吗?

时间:2015-09-09 05:51:29

标签: sql-server join

我有这个表用户,问题,子问题,用户数据

我这样加入他们:

Select * FROM User 
Inner join problem ON user.id = problem.userid
Inner join subproblem ON user.id = subproblem.userid
Inner join userdata ON user.id = userdata.userid

在userdata中是像邮政编码/省

这样的数据

我需要这些数据,但我还需要输出显示某个省有多少问题的结果。我怎么会这样做?进行单独查询或在所选行后面创建一行来计算每个省的问题?我该如何处理?

您可以查询查询结果吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您遇到的问题比省份多,那么最好使用两个单独的查询。你可以将它填入一个,但这对数据库来说意味着更多的工作而没有真正的利润。

此外,您通常不会在每个结果行中将摘要数据输出到用户,然后您必须从实际问题行中获取摘要数据。

编辑:只是猜测计数查询,因为没有给出表格结构。

select ud.province, count(*) as number_problems
from userdata as ud
left join problem p on p.user_id = ud.user_id
group by ud.province;

EDIT2:只是为了好玩,这是一个小的(完全未经测试的)想法,我将如何在一个查询中完成它的一部分:

@set province=NULL;
@set numprobs=NULL;

select isel.province
  , if(@province = isel.province,
        @numprobs := @numprobs+1,
        @numprobs := 1 + if(@province := isel.province, 0, 0)) as numprobs
  , isel.*
from (
    select * FROM User 
    Inner join problem ON user.id = problem.userid
    Inner join subproblem ON user.id = subproblem.userid
    Inner join userdata ON user.id = userdata.userid
    order by userdata.province, userdata.<somedata>
    ) as isel

但是,如果您想先按省份订购原始数据,则只需订购另外的子查询。

整个查询应该或多或少地处理,所以它不应该花费更多的时间,但它会比没有变量魔法更慢。当您尝试使用子查询时,处理时间可以大量增长。

在这个有趣的版本中,你没有获得最大值,但是这是该省的第23号问题&#34;,你必须手动捕获最大值。但是当然MySQL也可以为你做这件事(在查询周围的另一个内部选择框中)。