33 sql group-by aggregate-functions
我在Oracle SQL中遇到问题.
我first_name在employees表格中有一列.我想根据第一个字符对我的记录进行分组first_name.
例如,我有26条记录,一个用name = 'Alice',一用name = 'Bob',等下来的字母表每个名称的第一个字符.查询后,应该有26个组,每个组有一名员工.
我尝试了以下,但它不起作用:
SELECT employee_id, (SUBSTR(first_name,1,1)) AS alpha FROM employees
GROUP BY alpha;
name_which_starts_from employees
A 10
B 2
C 4
D 9
E 3
G 3
H 3
I 2
J 16
K 7
L 6
M 6
N 4
O 1
P 6
R 3
S 13
T 4
V 2
W 3
Run Code Online (Sandbox Code Playgroud)
Pab*_*ruz 57
您的查询是错误的,因为如果您希望这样做,您需要在EMPLOYEE_ID上执行一些聚合功能.
喜欢:
select substr(first_name,1,1) as alpha, count(employee_id)
from employees
group by substr(first_name,1,1)
Run Code Online (Sandbox Code Playgroud)
你究竟想要完成什么?
您需要按非聚合函数的所有内容进行分组,因此您不能在SELECT投影中使用employee_id.您还需要仅按first_name的第一个字符进行分组.这样的事情应该有效:
SELECT SUBSTR(first_name, 1, 1) AS alpha, COUNT(*) AS employee_count
FROM employees
GROUP BY SUBSTR(first_name, 1, 1);
Run Code Online (Sandbox Code Playgroud)
这将按名字的第一个字母分组,并显示属于该组的员工数量.
小智 6
我有类似的问题,并用语句解决了这个问题:
select SUBSTR(word, 1, 1) as S, count(word) FROM table_words group by S order by S ASC
