mysql 使用UNION ALL问题
SELECTLEVEL,man,womanFROM(SELECTLEVEL,COUNT(*)AS'woman'FROM(SELECTid,LEVEL,sexFROMpla...
SELECT LEVEL,man,woman FROM(
SELECT LEVEL,COUNT(*) AS 'woman' FROM
(SELECT id,LEVEL,sex FROM player_attributes WHERE sex=1)t1 GROUP BY LEVEL
UNION ALL
SELECT LEVEL,COUNT(*) AS 'man' FROM
(SELECT id,LEVEL,sex FROM player_attributes WHERE sex=0)t2 GROUP BY LEVEL
)t5 GROUP BY LEVEL
运行后报错:Unknown column 'man' in 'field list' 展开
SELECT LEVEL,COUNT(*) AS 'woman' FROM
(SELECT id,LEVEL,sex FROM player_attributes WHERE sex=1)t1 GROUP BY LEVEL
UNION ALL
SELECT LEVEL,COUNT(*) AS 'man' FROM
(SELECT id,LEVEL,sex FROM player_attributes WHERE sex=0)t2 GROUP BY LEVEL
)t5 GROUP BY LEVEL
运行后报错:Unknown column 'man' in 'field list' 展开
4个回答
展开全部
起别名不用加单引号的呀
SELECT LEVEL,man,woman FROM(
SELECT LEVEL,COUNT(*) AS woman FROM
(SELECT id,LEVEL,sex FROM player_attributes WHERE sex=1)t1 GROUP BY LEVEL
UNION ALL
SELECT LEVEL,COUNT(*) AS 'man' FROM
(SELECT id,LEVEL,sex FROM player_attributes WHERE sex=0)t2 GROUP BY LEVEL) t5
GROUP BY LEVEL
你用下边这个看能得到你要的结果不
select level,
sum(case when sex=1 then 1 else 0 end) as woman,
sum(case when sex=0 then 1 else 0 end) as man
from player_attributes
group by level
展开全部
SELECT LEVEL,man,woman FROM( SELECT LEVEL,COUNT(*) AS 'woman' FROM
这里有问题,你第二层sql搜出的字段只有level和woman,而你最外面的select 在搜索level, man和woman三个字段,所以会报man没有找到的错误
这里有问题,你第二层sql搜出的字段只有level和woman,而你最外面的select 在搜索level, man和woman三个字段,所以会报man没有找到的错误
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
union all 不会去重,会把2个表的所有数据都统计起来;
union会有去重功能,将2个表中一模一样的数据(列项内容一样)保留一份;
union会有去重功能,将2个表中一模一样的数据(列项内容一样)保留一份;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
MySQL中的UNION
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from gc_dfys union select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
MySQL中的UNION ALL
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:
select * from gc_dfys union all select * from ls_jg_dfys
MySQL中的UNION
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from gc_dfys union select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
MySQL中的UNION ALL
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:
select * from gc_dfys union all select * from ls_jg_dfys
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询