如何解决同时使用Count和Sum?
我正在尝试创建一个查询,在该查询中我想从一个表中选择雇员,从另一个表中计算出他们的证书数量,这是总数,然后显示具有3个以上证书的员工。我尝试过:
SELECT CONCAT (
employee_bt.EMP_FNAME," ",employee_bt.EMP_LNAME
) AS "Full Name",count(earnedrating_bt.RTG_CODE) AS "Count of Rating"
FROM employee_bt
INNER JOIN earnedrating_bt ON earnedrating_bt.EMP_NUM = employee_bt.EMP_NUM
INNER JOIN rating_bt ON rating_bt.RTG_CODE = earnedrating_bt.RTG_CODE
GROUP BY employee_bt.EMP_NUM,earnedrating_bt.RTG_CODE
ORDER BY employee_bt.EMP_LNAME ASC
但是它返回的是这样的信息,理想情况下,我希望将这些员工加起来,而不是3行,每行1条,我只想说3行,即3行。
Jeanine Duzak 1
Jeanine Duzak 1
Jeanine Duzak 1
John Lange 1
John Lange 1
John Lange 1
Rhonda Lewis 1
Rhonda Lewis 1
Rhonda Lewis 1
Rhonda Lewis 1
应成为:
Jeanine Duzak 3
John Lange 3
Rhonda Lewis 4
解决方法
如果您希望每个员工姓名一行,那么该行应该是GROUP BY
中的唯一列:
group by employee_bt.EMP_NUM
我建议将查询编写为:
select concat(e.EMP_FNAME,' ',e.EMP_LNAME) as Full_Name,count(*) as rating_count
from employee_bt e join
earnedrating_bt er
on er.EMP_NUM = e.EMP_NUM
group by e.EMP_NUM
order by e.EMP_LNAME asc;
注意:
- 从
JOIN
到rating
似乎不需要计数。 - 为表引用分配了别名。这样可以更轻松地编写和读取查询。
- 命名您的列,这样就不必对其进行转义。
- 对字符串使用单引号。不要将字符串与标识符混淆!
-
GROUP BY
列与SELECT
列不一致。假设EMP_NUM
是employees表的主键,这是可以的,这是一个合理的假设。
只需更改group by
子句:
group by employee_bt.EMP_NUM,earnedrating_bt.RTG_CODE
收件人:
group by employee_bt.EMP_NUM
这保证每个EMP_NUM
可以有一行。为了使其正常工作,您需要EMP_NUM
作为employee_bt
表的主键。否则,您需要在emp_fname
子句中添加emp_lname
和group by
。
您也可以使用相关子查询来表达这一点:
select concat(e.emp_fname,e.emp_lname) as full_name,(
select count(*)
from earnedrating_bt er
inner join rating_bt r on r.rtg_code = er.rtg_code
where er.emp_num = employee_bt.emp_num
) count_of_rating
from employee_bt e
order by e.emp_lname asc
,
我想,如果您对RTG代码是什么,而不是数字感兴趣,就只需要按员工分组即可。
这行吗?
select
concat(employee_bt.EMP_FNAME," ",employee_bt.EMP_LNAME) as "Full Name",count(earnedrating_bt.RTG_CODE) as "Count of Rating"
from employee_bt
inner join earnedrating_bt on earnedrating_bt.EMP_NUM=employee_bt.EMP_NUM
inner join rating_bt on rating_bt.RTG_CODE=earnedrating_bt.RTG_CODE
group by employee_bt.EMP_NUM
HAVING count(earnedrating_bt.RTG_CODE) >=3
order by employee_bt.EMP_LNAME asc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。