{"id":66919,"date":"2022-09-02T09:01:43","date_gmt":"2022-09-02T09:01:43","guid":{"rendered":"https:\/\/www.cryptocabaret.com\/?p=66919"},"modified":"2022-09-02T09:01:43","modified_gmt":"2022-09-02T09:01:43","slug":"how-to-display-the-presence-and-absence-of-nth-highest-group-wise-values-in-sql","status":"publish","type":"post","link":"https:\/\/www.cryptocabaret.com\/?p=66919","title":{"rendered":"How to display the presence and absence of nth-highest group-wise values in SQL"},"content":{"rendered":"<p><span class=\"field field--name-title field--type-string field--label-hidden\">How to display the presence and absence of nth-highest group-wise values in SQL<\/span><br \/>\n<span class=\"field field--name-uid field--type-entity-reference field--label-hidden\"><a title=\"View user profile.\" href=\"https:\/\/opensource.com\/users\/kamilk98\" class=\"username\">Mohammed Kamil Khan<\/a><\/span><br \/>\n<span class=\"field field--name-created field--type-created field--label-hidden\">Fri, 09\/02\/2022 &#8211; 03:00<\/span><\/p>\n<div data-drupal-selector=\"rate-node-70174\" class=\"rate-widget-thumbs-up\" title=\"Register or Login to like.\">\n<div class=\"rate-thumbs-up-btn-up vote-pending\"><a href=\"https:\/\/opensource.com\/user\/register\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml\">Login<\/a> to like<\/div>\n<div class=\"rate-score\"><a href=\"https:\/\/opensource.com\/user\/register\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml\">Login<\/a> to like<\/div>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item\">\n<p>While skimming through SQL to prepare for interviews, I often come across this question: Find the employee with the highest or (second-highest) salary by joining a table containing employee information with another that contains department information. This raises a further question: What about finding the employee who earns the <i>nth-<\/i>highest salary department-wide?<\/p>\n<\/p>\n<div class=\"embedded-resource-list callout-float-right\">\n<div class=\"field field--name-title field--type-string field--label-hidden field__item\">More great content<\/div>\n<div class=\"field field--name-links field--type-link field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/www.redhat.com\/en\/services\/training\/rh024-red-hat-linux-technical-overview?intcmp=7016000000127cYAAQ\">Free online course: RHEL technical overview<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/developers.redhat.com\/cheat-sheets\/advanced-linux-commands\/?intcmp=7016000000127cYAAQ\">Learn advanced Linux commands<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/downloads\/cheat-sheets?intcmp=7016000000127cYAAQ\">Download cheat sheets<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/linux?intcmp=7016000000127cYAAQ\">Find an open source alternative<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/resources?intcmp=7016000000127cYAAQ\">Explore open source resources<\/a><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<p>Now I want to pose a more complex scenario: What will happen when a department doesn&#8217;t have an employee earning the nth-highest salary? For example, a department with only two employees will not have an employee earning the third-highest salary.<\/p>\n<p>Here&#8217;s my approach to this question:<\/p>\n<h2>Create department and employee tables<\/h2>\n<p>I create a table that includes fields such as <code>dept_id<\/code> and <code>dept_name<\/code>.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">CREATE<\/span> <span class=\"kw1\">TABLE<\/span> department <span class=\"br0\">(<\/span><br>\n\u00a0 \u00a0 dept_id <span class=\"kw1\">INT<\/span><span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0 dept_name <span class=\"kw1\">VARCHAR<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">60<\/span><span class=\"br0\">)<\/span><br><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<p>Now I insert various departments into the new table.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> department <span class=\"br0\">(<\/span>dept_id<span class=\"sy0\">,<\/span>dept_name<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"nu0\">780<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'HR'<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> department <span class=\"br0\">(<\/span>dept_id<span class=\"sy0\">,<\/span>dept_name<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"nu0\">781<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Marketing'<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> department <span class=\"br0\">(<\/span>dept_id<span class=\"sy0\">,<\/span>dept_name<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"nu0\">782<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Sales'<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> department <span class=\"br0\">(<\/span>dept_id<span class=\"sy0\">,<\/span>dept_name<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"nu0\">783<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Web Dev'<\/span><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig.252012520sql.png\" width=\"409\" height=\"265\" alt=\"A table showing the data from the earlier code snippets with the columns \" department and name><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 1. The department table (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Next, I create another table incorporating the fields <code>first_name<\/code>, <code>last_name<\/code>, <code>dept_id<\/code>, and <code>salary<\/code>.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">CREATE<\/span> <span class=\"kw1\">TABLE<\/span> employee <span class=\"br0\">(<\/span><br>\n\u00a0 \u00a0 first_name <span class=\"kw1\">VARCHAR<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">100<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0 last_name <span class=\"kw1\">VARCHAR<\/span><span class=\"br0\">(<\/span><span class=\"nu0\">100<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0 dept_id <span class=\"kw1\">INT<\/span><span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0 salary <span class=\"kw1\">INT<\/span><br><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<p>Then I insert values into the table:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Sam'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Burton'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">781<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">80000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Peter'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Mellark'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">780<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">90000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Happy'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Hogan'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">782<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">110000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Steve'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Palmer'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">782<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">120000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Christopher'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Walker'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">783<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">140000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Richard'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Freeman'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">781<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">85000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Alex'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Wilson'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">782<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">115000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Harry'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Simmons'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">781<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">90000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Thomas'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Henderson'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">780<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">95000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Ronald'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Thompson'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">783<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">130000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'James'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Martin'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">783<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">135000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Laurent'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Fisher'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">780<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">100000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Tom'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Brooks'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">780<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">85000<\/span><span class=\"br0\">)<\/span>;<br><span class=\"kw1\">INSERT<\/span> <span class=\"kw1\">INTO<\/span> employee <span class=\"br0\">(<\/span>first_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>dept_id<span class=\"sy0\">,<\/span>salary<span class=\"br0\">)<\/span><br><span class=\"kw1\">VALUES<\/span> <span class=\"br0\">(<\/span><span class=\"st0\">'Tom'<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'Bennington'<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">783<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">140000<\/span><span class=\"br0\">)<\/span>;<\/div><\/div><\/pre>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/FIG252022520sql.png\" width=\"606\" height=\"546\" alt=\"A table showing data from the earlier code snippets with first name, last name, dept ID, and salary columns, ordered by department ID number\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 2. A table of employees ordered by department ID (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>I can infer the number of employees in each department using this table (department ID:number of employees):<\/p>\n<ul>\n<li>780:4<\/li>\n<li>781:3<\/li>\n<li>782:3<\/li>\n<li>783:4<\/li>\n<\/ul>\n<p>If I want the view the second-highest-earning employees from different departments, along with their department&#8217;s name (using <code>DENSE_RANK<\/code>), the table will be as follows:<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig252032520sql.png\" width=\"675\" height=\"212\" alt=\"A table with department ID, department name, first name, last name, and salary columns, listing the second-highest-earning employee in each of four departments, ordered from lowest to highest salary\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 3. The second-highest-earning employee in each department (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>If I apply the same query to find the fourth-highest-earning employees, the output will be only Tom Brooks of department 780 (HR), with a salary of $85,000.<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fg252042520sql.png\" width=\"675\" height=\"121\" alt=\"The table listing fourth-highest-earning employees lists only one employee.\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 4. The fourth-highest-earning employee (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Though department 783 (Web Dev) has four employees, two (James Martin and Ronald Thompson) will be classified as the third-highest-earning employees of that department, since the top two earners have the same salary.<\/p>\n<h2>Finding the nth highest<\/h2>\n<p>Now, to the main question: What if I want to display the <code>dept_ID<\/code> and <code>dept_name<\/code> with null values for employee-related fields for departments that do not have an nth-highest-earning employee?<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig252052520sql.png\" width=\"675\" height=\"206\" alt=\"The list of fourth-highest-earning employee by department, showing \" null in the first name last and salary columns for departments that do not have a fourth-highest earner.><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 5. All departments listed, whether or not they have an nth-highest-earning employee (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>The table displayed in Figure 5<b> <\/b>is what I am aiming to obtain when specific departments do not have an nth-highest-earning employee: The marketing, sales, and web dev departments are listed, but the name and salary fields contain a null value.<\/p>\n<p>The ultimate query that helps obtain the table in Figure 5 is as follows:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">WITH<\/span> null1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> A<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>salary<br><span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><br><span class=\"kw1\">SELECT<\/span> department<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> department<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span><br>\nemployee<span class=\"sy0\">.<\/span>salary<span class=\"sy0\">,<\/span> DENSE_RANK<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">OVER<\/span> <span class=\"br0\">(<\/span>PARTITION <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>salary <span class=\"kw1\">DESC<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> Rank1<br><span class=\"kw1\">FROM<\/span> employee <span class=\"kw1\">INNER<\/span> <span class=\"kw1\">JOIN<\/span> department<br><span class=\"kw1\">ON<\/span> employee<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>department<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> k<br><span class=\"kw1\">WHERE<\/span> rank1<span class=\"sy0\">=<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>A<span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nfull1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id<span class=\"sy0\">,<\/span> dept_name <span class=\"kw1\">FROM<\/span> department <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">IN<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id <span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">NULL<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nnulled <span class=\"kw1\">AS<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span><br><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> null1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">THEN<\/span> full1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ELSE<\/span> null1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">END<\/span><span class=\"sy0\">,<\/span><br><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> null1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">THEN<\/span> full1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">ELSE<\/span> null1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">END<\/span><span class=\"sy0\">,<\/span><br>\nfirst_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>salary<br><span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">RIGHT<\/span> <span class=\"kw1\">JOIN<\/span> full1 <span class=\"kw1\">ON<\/span> null1<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>full1<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span><br><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> null1<br><span class=\"kw1\">UNION<\/span><br><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> nulled<br><span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> dept_id<span class=\"br0\">)<\/span><br>\nB;<\/div><\/div><\/pre>\n<h2>Breakdown of the query<\/h2>\n<p>I will break down the query to make it less overwhelming.<\/p>\n<p>Use <code>DENSE_RANK()<\/code> to display employee and department information (not involving null for the absence of the nth-highest-earning member):<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><br>\n\u00a0 <span class=\"kw1\">SELECT<\/span> department<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> department<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0employee<span class=\"sy0\">.<\/span>salary<span class=\"sy0\">,<\/span> DENSE_RANK<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">OVER<\/span> <span class=\"br0\">(<\/span>PARTITION <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>salary <span class=\"kw1\">DESC<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> Rank1<br>\n\u00a0 \u00a0<span class=\"kw1\">FROM<\/span> employee <span class=\"kw1\">INNER<\/span> <span class=\"kw1\">JOIN<\/span> department<br>\n\u00a0 \u00a0<span class=\"kw1\">ON<\/span> employee<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>department<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> k<br>\n\u00a0 \u00a0<span class=\"kw1\">WHERE<\/span> rank1<span class=\"sy0\">=<\/span><span class=\"nu0\">4<\/span><\/div><\/div><\/pre>\n<p>Output:<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig252062520sql.png\" width=\"675\" height=\"89\" alt=\"A table of the fourth-highest earners showing only the department with a fourth-highest earner\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 6. The fourth-highest earner (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Exclude the <code>rank1<\/code> column from the table in Figure 6, which identifies only one employee with a fourth-highest salary, even though there are four employees in another department.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">SELECT<\/span> A<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>salary<br>\n\u00a0 \u00a0 <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><br>\n\u00a0 <span class=\"kw1\">SELECT<\/span> department<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> department<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0employee<span class=\"sy0\">.<\/span>salary<span class=\"sy0\">,<\/span> DENSE_RANK<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">OVER<\/span> <span class=\"br0\">(<\/span>PARTITION <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>salary <span class=\"kw1\">DESC<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> Rank1<br>\n\u00a0 \u00a0<span class=\"kw1\">FROM<\/span> employee <span class=\"kw1\">INNER<\/span> <span class=\"kw1\">JOIN<\/span> department<br>\n\u00a0 \u00a0<span class=\"kw1\">ON<\/span> employee<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>department<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> k<br>\n\u00a0 \u00a0<span class=\"kw1\">WHERE<\/span> rank1<span class=\"sy0\">=<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>A<\/div><\/div><\/pre>\n<p>Output:<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig252072520sql.png\" width=\"675\" height=\"103\" alt=\"The fourth-highest earner table (table six) without the rank 1 column\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 7. The fourth-highest earner table without the rank 1 column (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Point out the departments from the department table that do not have an nth-highest-earning employee:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">WITH<\/span> null1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> A<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>salary<br>\n\u00a0 \u00a0 <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><br>\n\u00a0 <span class=\"kw1\">SELECT<\/span> department<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> department<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0employee<span class=\"sy0\">.<\/span>salary<span class=\"sy0\">,<\/span> DENSE_RANK<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">OVER<\/span> <span class=\"br0\">(<\/span>PARTITION <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>salary <span class=\"kw1\">DESC<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> Rank1<br>\n\u00a0 \u00a0<span class=\"kw1\">FROM<\/span> employee <span class=\"kw1\">INNER<\/span> <span class=\"kw1\">JOIN<\/span> department<br>\n\u00a0 \u00a0<span class=\"kw1\">ON<\/span> employee<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>department<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> k<br>\n\u00a0 \u00a0<span class=\"kw1\">WHERE<\/span> rank1<span class=\"sy0\">=<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>A<span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nfull1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id<span class=\"sy0\">,<\/span> dept_name <span class=\"kw1\">FROM<\/span> department <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">IN<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id <span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">NULL<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><br><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> full1<span class=\"br0\">)<\/span>B<\/div><\/div><\/pre>\n<p>Output:<\/p>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig252082520sql.png\" width=\"354\" height=\"192\" alt=\"The full1 table listing the departments without a fourth-highest earner by department ID and name: marketing, sales, web dev\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 8. The full1 table listing the departments without a fourth-highest earner (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Replace <code>full1<\/code> in the last line of the above code with <code>null1<\/code>:<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">WITH<\/span> null1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> A<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>salary<br>\n\u00a0 \u00a0 <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><br>\n\u00a0 <span class=\"kw1\">SELECT<\/span> department<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> department<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0employee<span class=\"sy0\">.<\/span>salary<span class=\"sy0\">,<\/span> DENSE_RANK<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">OVER<\/span> <span class=\"br0\">(<\/span>PARTITION <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>salary <span class=\"kw1\">DESC<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> Rank1<br>\n\u00a0 \u00a0<span class=\"kw1\">FROM<\/span> employee <span class=\"kw1\">INNER<\/span> <span class=\"kw1\">JOIN<\/span> department<br>\n\u00a0 \u00a0<span class=\"kw1\">ON<\/span> employee<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>department<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> k<br>\n\u00a0 \u00a0<span class=\"kw1\">WHERE<\/span> rank1<span class=\"sy0\">=<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>A<span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nfull1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id<span class=\"sy0\">,<\/span> dept_name <span class=\"kw1\">FROM<\/span> department <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">IN<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id <span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">NULL<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><br><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> null1<span class=\"br0\">)<\/span>B<\/div><\/div><\/pre>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig252092520sql.png\" width=\"675\" height=\"198\" alt=\"The null1 table listing all departments, with null values for those without a fourth-highest earner \"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 9. The null1 table listing all departments, with null values for those without a fourth-highest earner (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Now, I fill the null values of the\u00a0<code>dept_id<\/code> and <code>dept_name<\/code> fields in Figure 9 with the corresponding values from Figure 8.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">WITH<\/span> null1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> A<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>salary<br>\n\u00a0 \u00a0 <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><br>\n\u00a0 <span class=\"kw1\">SELECT<\/span> department<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> department<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span><br>\n\u00a0 \u00a0employee<span class=\"sy0\">.<\/span>salary<span class=\"sy0\">,<\/span> DENSE_RANK<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">OVER<\/span> <span class=\"br0\">(<\/span>PARTITION <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>salary <span class=\"kw1\">DESC<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> Rank1<br>\n\u00a0 \u00a0<span class=\"kw1\">FROM<\/span> employee <span class=\"kw1\">INNER<\/span> <span class=\"kw1\">JOIN<\/span> department<br>\n\u00a0 \u00a0<span class=\"kw1\">ON<\/span> employee<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>department<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> k<br>\n\u00a0 \u00a0<span class=\"kw1\">WHERE<\/span> rank1<span class=\"sy0\">=<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>A<span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nfull1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id<span class=\"sy0\">,<\/span> dept_name <span class=\"kw1\">FROM<\/span> department <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">IN<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id <span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">NULL<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nnulled <span class=\"kw1\">AS<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span><br><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> null1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">THEN<\/span> full1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ELSE<\/span> null1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">END<\/span><span class=\"sy0\">,<\/span><br><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> null1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">THEN<\/span> full1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">ELSE<\/span> null1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">END<\/span><span class=\"sy0\">,<\/span><br>\nfirst_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>salary<br><span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">RIGHT<\/span> <span class=\"kw1\">JOIN<\/span> full1 <span class=\"kw1\">ON<\/span> null1<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>full1<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span><br><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> nulled<span class=\"br0\">)<\/span> B;<\/div><\/div><\/pre>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig2520102520sql.png\" width=\"675\" height=\"155\" alt=\"The table with department id, department name, first name, last name, and salary columns, with null values in the name and salary columns\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 10. The result of the nulled query (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>The nulled query uses <code>CASE WHEN<\/code> on the nulls encountered in the <code>dept_id<\/code> and <code>dept_name<\/code> columns of the <code>null1<\/code> table and replaces them with the corresponding values in the <code>full1<\/code> table. Now all I need to do is apply <code>UNION<\/code> to the tables obtained in Figure 7 and Figure 10. This can be accomplished by declaring the last query in the previous code using <code>WITH<\/code> and then <code>UNION<\/code>-izing it with <code>null1<\/code>.<\/p>\n<pre>\n<div class=\"geshifilter\"><div class=\"sql geshifilter-sql\"><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">WITH<\/span> null1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> A<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span> A<span class=\"sy0\">.<\/span>salary<br><span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> <span class=\"br0\">(<\/span><br><span class=\"kw1\">SELECT<\/span> department<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">,<\/span> department<span class=\"sy0\">.<\/span>dept_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>first_name<span class=\"sy0\">,<\/span> employee<span class=\"sy0\">.<\/span>last_name<span class=\"sy0\">,<\/span><br>\nemployee<span class=\"sy0\">.<\/span>salary<span class=\"sy0\">,<\/span> DENSE_RANK<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">OVER<\/span> <span class=\"br0\">(<\/span>PARTITION <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> employee<span class=\"sy0\">.<\/span>salary <span class=\"kw1\">DESC<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> Rank1<br><span class=\"kw1\">FROM<\/span> employee <span class=\"kw1\">INNER<\/span> <span class=\"kw1\">JOIN<\/span> department<br><span class=\"kw1\">ON<\/span> employee<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>department<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> k<br><span class=\"kw1\">WHERE<\/span> rank1<span class=\"sy0\">=<\/span><span class=\"nu0\">4<\/span><span class=\"br0\">)<\/span>A<span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nfull1 <span class=\"kw1\">AS<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id<span class=\"sy0\">,<\/span> dept_name <span class=\"kw1\">FROM<\/span> department <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">IN<\/span> <span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span> dept_id <span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">WHERE<\/span> dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NOT<\/span> <span class=\"kw1\">NULL<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><br>\nnulled <span class=\"kw1\">AS<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">SELECT<\/span><br><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> null1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">THEN<\/span> full1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">ELSE<\/span> null1<span class=\"sy0\">.<\/span>dept_id <span class=\"kw1\">END<\/span><span class=\"sy0\">,<\/span><br><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> null1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">IS<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">THEN<\/span> full1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">ELSE<\/span> null1<span class=\"sy0\">.<\/span>dept_name <span class=\"kw1\">END<\/span><span class=\"sy0\">,<\/span><br>\nfirst_name<span class=\"sy0\">,<\/span>last_name<span class=\"sy0\">,<\/span>salary<br><span class=\"kw1\">FROM<\/span> null1 <span class=\"kw1\">RIGHT<\/span> <span class=\"kw1\">JOIN<\/span> full1 <span class=\"kw1\">ON<\/span> null1<span class=\"sy0\">.<\/span>dept_id<span class=\"sy0\">=<\/span>full1<span class=\"sy0\">.<\/span>dept_id<span class=\"br0\">)<\/span><br><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> null1<br><span class=\"kw1\">UNION<\/span><br><span class=\"kw1\">SELECT<\/span> <span class=\"sy0\">*<\/span> <span class=\"kw1\">FROM<\/span> nulled<br><span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> dept_id<span class=\"br0\">)<\/span><br>\nB;<\/div><\/div><\/pre>\n<article class=\"align-center media media--type-image media--view-mode-default\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/fig2520112520sql.png\" width=\"675\" height=\"186\" alt=\"The complete table: department ID, department name, first name, last name, salary columns. The first row contains the information of the one fourth-highest earner, and the next three columns show the remaining departments, with ID, and null value in the other three columns.\"><\/div>\n<div class=\"field field--name-field-caption field--type-text-long field--label-hidden caption field__item\"><span class=\"caption__byline\">Image by: <\/span><\/p>\n<p>Figure 11. The final result (Mohammed Kamil Khan, CC BY-SA 4.0)<\/p>\n<\/div>\n<\/article>\n<p>Now I can infer from Figure 11 that marketing, sales, and web dev are the departments that do not have any employees earning the fourth-highest salary.<\/p>\n<\/div>\n<div class=\"clearfix text-formatted field field--name-field-article-subhead field--type-text-long field--label-hidden field__item\">\n<p>A step-by-step breakdown of the query.<\/p>\n<\/div>\n<div class=\"field field--name-field-lead-image field--type-entity-reference field--label-hidden field__item\">\n<article class=\"media media--type-image media--view-mode-caption\">\n<div class=\"field field--name-field-media-image field--type-image field--label-hidden field__item\">  <img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/browser_web_internet_website.png\" width=\"1040\" height=\"584\" alt=\"Digital creative of a browser on the internet\" title=\"Digital creative of a browser on the internet\"><\/div>\n<\/article>\n<\/div>\n<div class=\"field field--name-field-tags field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/tags\/databases\" hreflang=\"en\">Databases<\/a><\/div>\n<\/p><\/div>\n<div class=\"field field--name-field-listicle-title field--type-string field--label-hidden field__item\">What to read next<\/div>\n<div class=\"field field--name-field-listicles field--type-entity-reference field--label-hidden field__items\">\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/article\/21\/2\/sqlite3-cheat-sheet\" hreflang=\"und\">A hands-on tutorial of SQLite3<\/a><\/div>\n<div class=\"field__item\"><a href=\"https:\/\/opensource.com\/article\/20\/10\/mariadb-mysql-cheat-sheet\" hreflang=\"und\">Improve your database knowledge with this MariaDB and MySQL cheat sheet<\/a><\/div>\n<\/p><\/div>\n<div class=\"field field--name-field-default-license field--type-list-string field--label-hidden field__item\"><a rel=\"license\" href=\"http:\/\/creativecommons.org\/licenses\/by-sa\/4.0\/\"><br \/>\n        <img decoding=\"async\" alt=\"Creative Commons License\" src=\"https:\/\/www.cryptocabaret.com\/wp-content\/uploads\/2022\/09\/cc-by-sa-4-2.png\" title=\"This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.\"><\/a>This work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.<\/div>\n<section class=\"field field--name-field-comments field--type-comment field--label-hidden comment-wrapper\">\n<div class=\"comments__count\">\n<div class=\"login\"><a href=\"https:\/\/opensource.com\/user\/register?absolute=1\">Register<\/a> or <a href=\"https:\/\/opensource.com\/user\/login?current=\/rss.xml&amp;absolute=1\">Login<\/a> to post a comment.<\/div>\n<\/p><\/div>\n<\/section>\n<p class=\"wpematico_credit\"><small>Powered by <a href=\"http:\/\/www.wpematico.com\" target=\"_blank\" rel=\"noopener\">WPeMatico<\/a><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>How to display the presence and absence of nth-highest group-wise values in SQL Mohammed Kamil Khan Fri, 09\/02\/2022 &#8211; 03:00 Register or Login to like Register or Login to like While skimming through SQL to prepare for interviews, I often come across this question: Find the employee with the highest or (second-highest) salary by joining [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":66920,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[307],"tags":[],"class_list":["post-66919","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-open-source"],"_links":{"self":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/66919","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=66919"}],"version-history":[{"count":0,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/posts\/66919\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=\/wp\/v2\/media\/66920"}],"wp:attachment":[{"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=66919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=66919"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cryptocabaret.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=66919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}