我有这个表用户,问题,子问题,用户数据
我这样加入他们:
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中是像邮政编码/省
这样的数据我需要这些数据,但我还需要输出显示某个省有多少问题的结果。我怎么会这样做?进行单独查询或在所选行后面创建一行来计算每个省的问题?我该如何处理?
您可以查询查询结果吗?
提前致谢
答案 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也可以为你做这件事(在查询周围的另一个内部选择框中)。