<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_exercises_solutions</id>
	<title>Drools exercises solutions - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://training-course-material.com/index.php?action=history&amp;feed=atom&amp;title=Drools_exercises_solutions"/>
	<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_exercises_solutions&amp;action=history"/>
	<updated>2026-04-21T08:52:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://training-course-material.com/index.php?title=Drools_exercises_solutions&amp;diff=33403&amp;oldid=prev</id>
		<title>Filip Stachecki: /* Exe51 */</title>
		<link rel="alternate" type="text/html" href="https://training-course-material.com/index.php?title=Drools_exercises_solutions&amp;diff=33403&amp;oldid=prev"/>
		<updated>2016-04-19T21:47:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Exe51&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Private]]&lt;br /&gt;
=Basic=&lt;br /&gt;
== Ex1==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;Exercise 1 Select all Salgrade facts&amp;quot;&lt;br /&gt;
 when &lt;br /&gt;
 &lt;br /&gt;
   $s : Salgrade()&lt;br /&gt;
 then    &lt;br /&gt;
   System.out.println($s.grade + &amp;#039;\t&amp;#039; + $s.losal + &amp;#039;\t&amp;#039; + $s.hisal)&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ex2 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 //Select shown data about employees who earn between 1000 and 2000.&lt;br /&gt;
 rule &amp;quot;Ex-2&amp;quot;&lt;br /&gt;
 when&lt;br /&gt;
 	$e : Emp(sal &amp;gt; 1000, sal &amp;lt; 2000)&lt;br /&gt;
 then&lt;br /&gt;
 	System.out.println($e.id + &amp;quot; &amp;quot; + $e.sal );&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ex3 == &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 // Select clerks working in department no 20.&lt;br /&gt;
  rule &amp;quot;showclerkofdeptno20&amp;quot; enabled true&lt;br /&gt;
 when &lt;br /&gt;
  $e: Emp(job == &amp;quot;CLERK&amp;quot; &amp;amp;&amp;amp; deptno == 20) &lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println($e.id + &amp;quot; &amp;quot; + $e.name + &amp;quot; &amp;quot; + $e.job + &amp;quot; &amp;quot; + $e.mgr + &amp;quot; &amp;quot; + $e.hiredate + &amp;quot; &amp;quot; + $e.sal + &amp;quot; &amp;quot; + $e.deptno)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ex4 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;Sample3&amp;quot; enabled false&lt;br /&gt;
 when &lt;br /&gt;
      $e:Emp(mgr!=0)&lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println($e.id + &amp;quot; &amp;quot; + $e.name + &amp;quot;\t&amp;quot; + $e.deptno+ &amp;quot;\t&amp;quot; + $e.sal )&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Ex4 ver 2==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
rule &amp;quot;Ex4&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
	$e: Emp($mgr :mgr)&lt;br /&gt;
	not Emp(id == $mgr)&lt;br /&gt;
	//not (exists Emp(id == $mgr))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println($e.name)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EX5 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  rule &amp;quot;showmgrannualrem&amp;quot;&lt;br /&gt;
 when&lt;br /&gt;
  $e: Emp(job == &amp;quot;MANAGER&amp;quot;) &lt;br /&gt;
 then   &lt;br /&gt;
  System.out.println($e.id + &amp;quot; &amp;quot; + $e.name + &amp;quot; &amp;quot; + $e.job + &amp;quot; &amp;quot; + $e.mgr + &amp;quot; &amp;quot; + $e.hiredate + &amp;quot; &amp;quot; + $e.sal*12 + &amp;quot; &amp;quot; + $e.deptno)&lt;br /&gt;
  end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EX5 ver 2==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  rule &amp;quot;showmgrannualrem&amp;quot;&lt;br /&gt;
when &lt;br /&gt;
 $e : Emp( job == &amp;quot;MANAGER&amp;quot;,$sal : sal )&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println($e.name + &amp;quot; &amp;quot; + $sal * 12 )&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== EX6 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 // Find employees with second letter L and third A&lt;br /&gt;
 rule &amp;quot;EX6&amp;quot; enabled false&lt;br /&gt;
 when&lt;br /&gt;
	$e: Emp(name matches &amp;#039;.LA.*&amp;#039;)&lt;br /&gt;
 then&lt;br /&gt;
	System.out.println($e.name);&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== EX7==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  rule &amp;quot;Find employees whose name contains T and ends with N&amp;quot; &lt;br /&gt;
  when&lt;br /&gt;
  $e:Emp(name matches &amp;quot;.*T.*N&amp;quot;)&lt;br /&gt;
    then&lt;br /&gt;
   System.out.println(&amp;quot; matches L.*$N&amp;quot;)&lt;br /&gt;
   System.out.println($e.id+&amp;quot;  &amp;quot;+$e.name+&amp;quot;   &amp;quot;+$e.job+&amp;quot;  &amp;quot;+$e.sal)&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ex8 == &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 // Find employees who either work as managers or work in department no 10, but not both.&lt;br /&gt;
 rule &amp;quot;Ex_08&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
     when&lt;br /&gt;
         $e : Emp ((deptno == &amp;#039;10&amp;#039; || $e.job == &amp;#039;MANAGER&amp;#039;)  &amp;amp;&amp;amp; !(deptno == &amp;#039;10&amp;#039; &amp;amp;&amp;amp;  $e.job == &amp;#039;MANAGER&amp;#039;))&lt;br /&gt;
         //$e : Emp( (job == &amp;quot;MANAGER&amp;quot; &amp;amp;&amp;amp; deptno != 10) || ( deptno == &amp;quot;10&amp;quot; &amp;amp;&amp;amp; job not in (&amp;quot;MANAGER&amp;quot;)  ) )&lt;br /&gt;
     then&lt;br /&gt;
        System.out.println(&amp;quot;Ex_08-&amp;quot; + $e.name + &amp;quot;job-&amp;quot; + $e.job +&amp;quot; salgrade=&amp;quot;+ $e.deptno) ;&lt;br /&gt;
  &lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ex8 version 2 == &lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;Find employees who either work as managers or work in department no 10, but not both&amp;quot; enabled true&lt;br /&gt;
 when&lt;br /&gt;
    $e: Emp((job == &amp;#039;MANAGER&amp;#039; &amp;amp;&amp;amp; deptno != 10) || (deptno == 10 &amp;amp;&amp;amp; job != &amp;#039;MANAGER&amp;#039;))&lt;br /&gt;
 then&lt;br /&gt;
    System.out.println($e.name + &amp;quot; &amp;quot; + $e.job + &amp;quot; &amp;quot; + $e.deptno);&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=Advanced=&lt;br /&gt;
== Ex23 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  rule &amp;quot;excersie23&amp;quot;&lt;br /&gt;
 when &lt;br /&gt;
 accumulate(e:Emp(hiredate==1981),$avg : average(e.sal),$minsal:min(e.sal),$maxsal:max(e.sal))&lt;br /&gt;
 then &lt;br /&gt;
 System.out.println(   &amp;quot;Average salary  &amp;quot; +$avg +&amp;quot;Min salary  &amp;quot; +$minsal+&amp;quot;max salary  &amp;quot; +$maxsal )   &lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ex24==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 // Find the difference between maximal and minimal salary&lt;br /&gt;
 rule &amp;quot;EXE 24&amp;quot; enabled true&lt;br /&gt;
 when&lt;br /&gt;
  accumulate ($e :Emp(), $min : min($e.sal), $max : max($e.sal)) &lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println(&amp;quot;Difference between maximal and minimal salary: &amp;quot; + ($max - $min) + &amp;quot;\n&amp;quot;);&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ex25==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 // Find the average salary for every post.&lt;br /&gt;
&lt;br /&gt;
 declare SalByJob1&lt;br /&gt;
   job : String&lt;br /&gt;
   //avgSal : Double&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 rule &amp;quot;EXE 25&amp;quot; enabled true&lt;br /&gt;
 when&lt;br /&gt;
   Emp($j: job) and&lt;br /&gt;
   not SalByJob1($j == job)&lt;br /&gt;
   accumulate ($e :Emp(job == $j), 	$avg : average($e.sal)   	) &lt;br /&gt;
 then    &lt;br /&gt;
	&lt;br /&gt;
   System.out.println(    $j + &amp;quot; &amp;quot; + $avg + &amp;quot;\n&amp;quot;);&lt;br /&gt;
   //insert(new SalByJob($j,$avg))&lt;br /&gt;
   insert(new SalByJob1($j))&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Ex26==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 // How many managers work for the company?&lt;br /&gt;
&lt;br /&gt;
 rule &amp;quot;EXE 26&amp;quot; enabled true&lt;br /&gt;
 when&lt;br /&gt;
  accumulate ($e :Emp(job == &amp;#039;MANAGER&amp;#039;), $cnt : count($e.job)) &lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println(&amp;quot;How many managers work for the company: &amp;quot; + $cnt + &amp;quot;\n&amp;quot;);&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ex27==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
declare SalByDept&lt;br /&gt;
  deptno : Integer&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;EX 27 Find the average annual salaries in departments&amp;quot; enabled false&lt;br /&gt;
when&lt;br /&gt;
 Emp(d: deptno) and  &lt;br /&gt;
 not SalByDept(d == deptno)&lt;br /&gt;
 accumulate (e :Emp(deptno == d), $avg : average(e.sal*12)) &lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(&amp;quot;Salaries in dept &amp;quot; + d + &amp;quot; &amp;quot; + $avg)&lt;br /&gt;
   insert(new SalByDept(d))&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ex28==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
declare EmpByDept&lt;br /&gt;
  deptno : Integer&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;EX 28 Find departments with more than 3 workers.&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
 Emp(d: deptno) and  &lt;br /&gt;
 not EmpByDept(d == deptno)&lt;br /&gt;
 accumulate (e :Emp(deptno == d), cn : count(e.id)) &lt;br /&gt;
 Number(intValue &amp;gt; 3) from cn&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(&amp;quot;Employees in dept &amp;quot; + d + &amp;quot;: &amp;quot; + cn)&lt;br /&gt;
   insert(new EmpByDept(d))&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exe31==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;EmployeeLocation31&amp;quot; enabled false&lt;br /&gt;
 when&lt;br /&gt;
   d :Dept()&lt;br /&gt;
   e :Emp(d.deptno == deptno)&lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println(e.name + &amp;quot;\t&amp;quot; + d.loc)&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe32==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;Ex_32&amp;quot;&lt;br /&gt;
 when&lt;br /&gt;
 	e : Emp()&lt;br /&gt;
 	d : Dept(  e.deptno == deptno);&lt;br /&gt;
 then&lt;br /&gt;
 	System.out.println(&amp;quot;----------------------&amp;quot;);    &lt;br /&gt;
     System.out.println(&lt;br /&gt;
        e.name + &amp;quot;	\t&amp;quot; +  d.dname + &amp;quot; \t&amp;quot; + e.deptno);&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exe33==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;salarygrade33&amp;quot; enabled false&lt;br /&gt;
 when&lt;br /&gt;
   s :Salgrade()&lt;br /&gt;
   e :Emp(e.sal&amp;gt;=2000,e.sal&amp;gt;=s.losal,e.sal&amp;lt;=s.hisal)&lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println(e.name + &amp;quot;\t&amp;quot; + e.sal+&amp;quot;\t&amp;quot;+s.grade)&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe33 ver 2==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;salarygrade33&amp;quot; enabled false&lt;br /&gt;
 when&lt;br /&gt;
   e :Emp(sal&amp;gt;=2000)&lt;br /&gt;
   s :Salgrade(e.sal&amp;gt;=losal,e.sal&amp;lt;=hisal)&lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println(e.name + &amp;quot;\t&amp;quot; + e.sal+&amp;quot;\t&amp;quot;+s.grade)&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe34==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;workingLondon34&amp;quot; enabled false&lt;br /&gt;
 when&lt;br /&gt;
   d :Dept(loc==&amp;#039;LONDON&amp;#039;)&lt;br /&gt;
   e :Emp(d.deptno == deptno)&lt;br /&gt;
 then    &lt;br /&gt;
  System.out.println(e.name + &amp;quot;\t&amp;quot; + d.loc);&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe35==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
 rule &amp;quot;Ex-35&amp;quot; &lt;br /&gt;
 when&lt;br /&gt;
    $e : Emp()&lt;br /&gt;
    $d : Dept(deptno == $e.deptno, loc != &amp;#039;LONDON&amp;#039;)&lt;br /&gt;
    $s : Salgrade($e.sal &amp;gt; losal, $e.sal &amp;lt; hisal)&lt;br /&gt;
 then&lt;br /&gt;
    System.out.println($e.name+&amp;quot;  &amp;quot;+$d.loc+&amp;quot;  &amp;quot;+$s.grade );&lt;br /&gt;
 end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe36==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
rule &amp;quot;36 Exercise&amp;quot;	&lt;br /&gt;
    enabled false&lt;br /&gt;
when&lt;br /&gt;
  d:Dept()&lt;br /&gt;
  not (Emp(deptno == d.deptno))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println( d.dname )&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe37==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
    rule &amp;quot;37 Exercise&amp;quot;	&lt;br /&gt;
     enabled false&lt;br /&gt;
when&lt;br /&gt;
  d:Emp()&lt;br /&gt;
  e:Emp(d.id==e.mgr)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(   e.name +&amp;quot;boss is   &amp;quot;+ d.name);&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/source&amp;gt;   &lt;br /&gt;
== Exe39==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;    &lt;br /&gt;
   rule &amp;quot;39 Exercise&amp;quot;	&lt;br /&gt;
when&lt;br /&gt;
  d:Emp()&lt;br /&gt;
 not (Emp(d.id==mgr))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(    d.name);&lt;br /&gt;
&lt;br /&gt;
   end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exe41==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;  &lt;br /&gt;
rule &amp;quot;Ex-41&amp;quot; &lt;br /&gt;
when&lt;br /&gt;
	$e1 : Emp()&lt;br /&gt;
	$e2 : Emp(id == $e1.mgr, hiredate &amp;gt; $e1.hiredate)&lt;br /&gt;
then&lt;br /&gt;
	System.out.println( $e1.name+&amp;quot;  &amp;quot;+ $e2.name);&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exe43==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
declare FilledJobs&lt;br /&gt;
   job : String   &lt;br /&gt;
end&lt;br /&gt;
rule &amp;quot;Exercise43&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   e :Emp(e.hiredate in(1982 ,1983 )) &amp;amp;&amp;amp; not FilledJobs(e.job == job)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(e.job)&lt;br /&gt;
  insert(new FilledJobs(e.job))&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exe44==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise44&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
   e :Emp(e.deptno ==10)&lt;br /&gt;
 not (Emp (e.job == job &amp;amp;&amp;amp; deptno ==20))&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(e.job)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exe45==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
rule &amp;quot;Ex 45 Find employees earning more than the manager’s (job==&amp;#039;MANAGER&amp;#039;) average.&amp;quot; enabled true&lt;br /&gt;
when&lt;br /&gt;
  Number($avg :longValue  ) from accumulate (Emp(s: sal, job == &amp;quot;MANAGER&amp;quot;), average(s))&lt;br /&gt;
  e : Emp(sal &amp;gt; $avg)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(e.name + &amp;quot; &amp;quot; + e.sal)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe46==&lt;br /&gt;
===Solution 1===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
declare xJob&lt;br /&gt;
   name : String&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Ex 46 Find Select employees earning the maximum salaries in their positions (jobs).&amp;quot; enabled true&lt;br /&gt;
//doesn&amp;#039;t work if two people earn max values (TOOSK and CARNEGIE - both at analys positions)&lt;br /&gt;
&lt;br /&gt;
when&lt;br /&gt;
	Emp($j :job) and not(xJob(name == $j))&lt;br /&gt;
	Number($max :longValue) from accumulate (Emp(s: sal,job == $j ), max(s))&lt;br /&gt;
	e : Emp(job == $j,sal == $max)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(e.name + &amp;quot;\t&amp;quot; + e.deptno + &amp;quot;\t&amp;quot; + e.sal)&lt;br /&gt;
  insert(new xJob($j));&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Solution 2===&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
declare jobPost2&lt;br /&gt;
	job: String&lt;br /&gt;
	max: Double&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Exercise 46&amp;quot; &lt;br /&gt;
&lt;br /&gt;
when &lt;br /&gt;
	Emp(j:job)&lt;br /&gt;
	and not jobPost2(j == job)&lt;br /&gt;
	Number(max:doubleValue) from accumulate(Emp(s:sal, job==j), max(s)) &lt;br /&gt;
then&lt;br /&gt;
	insert(new jobPost2(j, max))&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Display&amp;quot;&lt;br /&gt;
&lt;br /&gt;
when&lt;br /&gt;
	jp: jobPost2(j: job, m: max)&lt;br /&gt;
	e: Emp (e.sal == m, e.job == j)&lt;br /&gt;
then&lt;br /&gt;
	System.out.println(e.name + &amp;quot; &amp;quot; + e.sal)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exe51==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;   &lt;br /&gt;
rule &amp;quot;Ex 51 Find employees earning more than the average salary in their department.&amp;quot;&lt;br /&gt;
when&lt;br /&gt;
	Dept(dn :deptno)&lt;br /&gt;
	Number($avg :longValue) from accumulate (Emp(s: sal,deptno == dn ), average(s))&lt;br /&gt;
	e : Emp(deptno == dn,sal &amp;gt; $avg)&lt;br /&gt;
then    &lt;br /&gt;
  System.out.println(e.name + &amp;quot;\t&amp;quot; + e.deptno + &amp;quot;\t&amp;quot; + e.sal)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
== Exe55==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt; &lt;br /&gt;
rule &amp;quot;Ex 55&amp;quot; enabled true&lt;br /&gt;
when&lt;br /&gt;
  $d: Dept(dn :deptno)&lt;br /&gt;
  Number($avg :longValue  ) from accumulate (Emp(s: sal,deptno == dn ), average(s))&lt;br /&gt;
then    &lt;br /&gt;
  insert (new DepsAvg($d, $avg))&lt;br /&gt;
  //System.out.println(($maxAvg))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
rule &amp;quot;Ex 55 second step&amp;quot; enabled true&lt;br /&gt;
when&lt;br /&gt;
  Number($max :longValue  )  from accumulate ($da :DepsAvg() , max($da.depAverage))&lt;br /&gt;
then      &lt;br /&gt;
  System.out.println($max)&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Filip Stachecki</name></author>
	</entry>
</feed>