使用 UNION/UNION ALL 和 Group By 的 MySQL 查询错误

新手上路,请多包涵

生成以下两个结果集:

1)。 查询 OCCUPATIONS 中所有名称按字母顺序排列的列表,紧随其后的是每个职业的第一个字母作为括号(即:括在括号中)。例如:AnActorName(A)、ADoctorName(D)、AProfessorName(P) 和 ASingerName(S)。

2)。 查询OCCUPATIONS中每个职业的出现次数。将出现的次数按升序排序,并按以下格式输出:

There are total [occupation_count] [occupation]s.

表名称:职业

总列数:两个=‘姓名’和’职业’,演示表如下所示:

表:职业

样本输出:

 Ashely(P)
Christeen(P)
Jane(A)
Jenny(D)
Julia(A)
Ketty(P)
Maria(A)
Meera(S)
Priya(S)
Samantha(D)
There are total 2 doctors.
There are total 2 singers.
There are total 3 actors.
There are total 3 professors.

我的方法:

 (SELECT NAME, '(', SUBSTRING(OCCUPATION, 1, 1), ')'
    FROM OCCUPATIONS ORDER BY NAME)
UNION ALL
(SELECT COUNT(*) FROM OCCUPATIONS GROUP BY OCCUPATION ORDER BY ASEC);

错误:

 ERROR 1222 (21000) at line 1:
    The used SELECT statements have a different number of columns

谢谢你!

原文由 castel_green 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您忘记使用 CONCAT 功能来粘合您选择的数据

尝试这样的事情(另见 sqlfiddle 上的这个例子):

 (
  SELECT CONCAT(NAME, '(', SUBSTRING(OCCUPATION, 1, 1), ')') as THETEXT, '1' as SELECTNUMBER
    FROM OCCUPATIONS
)
UNION ALL
(
  SELECT CONCAT('There are total ', COUNT(*),' ', OCCUPATION, (IF (COUNT(*) > 1, 's',''))) as THETEXT, '2' as SELECTNUMBER
   FROM OCCUPATIONS GROUP BY OCCUPATION
)
ORDER BY SELECTNUMBER ASC, THETEXT ASC;

原文由 alexander.polomodov 发布,翻译遵循 CC BY-SA 3.0 许可协议

SELECT CONCAT(NAME,"(",LEFT(OCCUPATION,1),")") FROM OCCUPATIONS
ORDER BY NAME;

SELECT CONCAT("There are a total of ",COUNT(OCCUPATION)," ",lower(OCCUPATION),"s.")
FROM OCCUPATIONS
GROUP BY OCCUPATION
ORDER BY COUNT(OCCUPATION);

原文由 areeb 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题