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

标签 mysql sql database

生成如下两个结果集:

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

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

共有 [occupation_count] [occupation] 个。

表名:职业

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

Table: Occupations

示例输出:

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

谢谢!

最佳答案

您忘记使用 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;

关于使用 UNION/UNION ALL 和 Group By 的 MySQL 查询错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391120/

相关文章:

mysql - 使用 MAX() 函数获得相等值的附加条件

sql - : Dealing with empty rows while copying from Excel to SQL

php - 数据库报错-kohana框架

android - Android 的通用图像加载器可以处理来自 sqlite 数据库的图像吗?

mysql - 我应该尽可能避免复合主键吗?

php - 将 mysql 函数转换为 pdo

详细信息后的 SQL 摘要行

php - 如何防止 PHP 中的 SQL 注入(inject)?

mysql - 找不到 phpmyadmin.conf 允许 IP 访问

php - 处理字符集(用户输入 -> Php -> Mysql 并返回)