sql—统计用户在另一个具有内部联接的表中的条目数

lmvvr0a8  于 2021-08-09  发布在  Java
关注(0)|答案(3)|浏览(444)

**结案。**此问题不可复制或由打字错误引起。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

12个月前关门了。
改进这个问题
我试图在sql中创建一个视图,该视图将从假日表中检查一个职员一年中休了多少个假日(例如,staffid 1被输入假日表4次,因此它将显示staffid:1 holidaycount:4)
我试着这样写:

select 
       holiday.staffid,
       staff.staffid,
       COUNT(*)
from
       staff
inner join holiday on staff.staffid = holiday.staffid

group by staff.staffid;

这给了我一个错误:ora-00918:列定义不明确
编辑:由于代码不正确而更改了代码

hfwmuf9z

hfwmuf9z1#

我想你需要这样的东西:

select s.staffid, count(h.staffid) no_holidays
from staff s
left join holiday h 
    on  h.staffid = a.staffid
    and h.holiday_date >= current_date - interval '1' year
group by s.staffid;

这个 left join 带来相应的记录 holiday ,同时允许员工不休假。我在屏幕上加了一个过滤器 holiday_date ,这是在问题中描述的。然后您可以聚合和 count .
您还可以使用横向联接或子查询来表示这一点,这样可以更容易地从中显示更多的列 staff :

select 
    s.*, 
    (
        select count(*) 
        from holiday h 
        where h.staffid = a.staffid and h.holiday_date >= current_date - interval '1' year

    ) no_holidays
from staff s
daolsyd0

daolsyd02#

下面的查询应该可以工作,您缺少 holiday 中的表 join 条件。如果两个 staffid's 相同,则只使用其中一个。

select 
   staff.staffid,
   COUNT(*)
from staff

inner join holiday 
on staff.staffid = holiday.staffid

group by 
    staff.staffid;
hwazgwia

hwazgwia3#

您需要使用 staffid 数一数 holiday_id (假日表的主键)因为 count(*) 可能对你没什么用

select 
       staff.staffid,
       COUNT(holiday_id)
from holiday
inner join staff on staff.staffid = holiday.staffid
group by staff.staffid;

相关问题