<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tonny Muthuri</title>
    <description>The latest articles on DEV Community by Tonny Muthuri (@tonny_muthuri_9556958a78f).</description>
    <link>https://dev.to/tonny_muthuri_9556958a78f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4070918%2F28771fa6-b897-48ca-b125-db46af085240.png</url>
      <title>DEV Community: Tonny Muthuri</title>
      <link>https://dev.to/tonny_muthuri_9556958a78f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tonny_muthuri_9556958a78f"/>
    <language>en</language>
    <item>
      <title>SQL FUNCTIONS, CTEs AND SUB-QUERIES EXPLAINED</title>
      <dc:creator>Tonny Muthuri</dc:creator>
      <pubDate>Mon, 19 Oct 2026 04:55:21 +0000</pubDate>
      <link>https://dev.to/tonny_muthuri_9556958a78f/sql-functions-ctes-and-sub-queries-explained-2cnn</link>
      <guid>https://dev.to/tonny_muthuri_9556958a78f/sql-functions-ctes-and-sub-queries-explained-2cnn</guid>
      <description>&lt;h1&gt;
  
  
  INTRODUCTION
&lt;/h1&gt;

&lt;p&gt;It has been two weeks of intensive learning, exploring sql concepts from scratch  at luxdevHQ.&lt;br&gt;
Structured Query Language(SQL) is basically the language used to communicate with databases.&lt;br&gt;
Sql is one of the core tools in data analysis.&lt;br&gt;
It allows users to retrieve, clean, transform, combine, and analyze data stored in databases.&lt;br&gt;
There are various Databases management systems used which have different functionalities such as Postgresql, Oracle, Mysql, Microsoft Sqlserver.&lt;br&gt;
For the case of this article, we will be using Postgresql.&lt;/p&gt;
&lt;h3&gt;
  
  
  Sql Functions
&lt;/h3&gt;

&lt;p&gt;Functions are built in operations that perform specific tasks on the data.&lt;br&gt;
They help you calculate, transform, clean, and analyze data.&lt;br&gt;
Some of the functions include;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;i. Row_Number()&lt;/strong&gt;&lt;br&gt;
This function assigns unique sequential numbers to each row.&lt;br&gt;
The most common uses is finding the top record within each group.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpn43v7gx28erumiuo8xq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpn43v7gx28erumiuo8xq.png" alt=" " width="615" height="402"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ii. Rank()&lt;/strong&gt;&lt;br&gt;
Ranking with gaps for ties.&lt;br&gt;
It gives tied rows the same rank and skips the next rank.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9zkj0h01u6znor08c0a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft9zkj0h01u6znor08c0a.png" alt=" " width="599" height="341"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;iii. Dense Rank()&lt;/strong&gt;&lt;br&gt;
This ranks without gaps&lt;br&gt;
Simply put, it does not skip a rank when there is a tie.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz2wmgc142dlv9s6i8l8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz2wmgc142dlv9s6i8l8q.png" alt=" " width="592" height="366"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;iv. Ntile(n)&lt;/strong&gt;&lt;br&gt;
It distributes into n buckets.&lt;br&gt;
It also assigns each row a group number.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21tkpb112lzn0x6eq8h6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21tkpb112lzn0x6eq8h6.png" alt=" " width="496" height="345"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;v. Lag()/Lead()&lt;/strong&gt;&lt;br&gt;
It accesses previous /next row.&lt;br&gt;
They're very useful when comparing periods.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt;
        &lt;span class="n"&gt;visit_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;lag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;over&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;visit_date&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;previous&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt;
        &lt;span class="n"&gt;visit_date&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;over&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;visit_date&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="k"&gt;next&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;vi. Count()&lt;/strong&gt;&lt;br&gt;
This function counts rows present in a given table.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; 
        &lt;span class="n"&gt;insurance_provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="k"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;patient_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="n"&gt;no_patients&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt;
&lt;span class="k"&gt;where&lt;/span&gt; &lt;span class="n"&gt;insurance_provider&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'None'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;insurance_provider&lt;/span&gt;
&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="k"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;patient_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt;
&lt;span class="k"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;vii. Sum()&lt;/strong&gt;&lt;br&gt;
The function is used to add numeric functions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; 
    &lt;span class="n"&gt;insurance_provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="k"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;revenue&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt;
&lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;insurance_provider&lt;/span&gt;
&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="k"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt;
&lt;span class="k"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;viii. First_Value()&lt;/strong&gt;&lt;br&gt;
This function returns the value from the first row in the window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmvpikvh3c8j9070oyil4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmvpikvh3c8j9070oyil4.png" alt=" " width="624" height="341"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ix. Last_Value()&lt;/strong&gt;&lt;br&gt;
Returns the value from the last row in the window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fton308sbrj4bmcjoedkk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fton308sbrj4bmcjoedkk.png" alt=" " width="616" height="357"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;x. Max()&lt;/strong&gt; &lt;br&gt;
This function returns the largest value in the column.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; 
        &lt;span class="n"&gt;insurance_provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;Highest&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt; 
&lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;insurance_provider&lt;/span&gt;
&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;x. Min()&lt;/strong&gt;&lt;br&gt;
Returns the smallest value in the column.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; 
        &lt;span class="n"&gt;insurance_provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="k"&gt;Min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;smallest&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt; 
&lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;insurance_provider&lt;/span&gt;
&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="k"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Order by()&lt;/strong&gt;&lt;br&gt;
It is used to sort data.&lt;br&gt;
The ORDER BY clause allows you to sort the result set of a query by one or more columns, either in ascending (ASC) or descending (DESC) order.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; 
    &lt;span class="n"&gt;insurance_provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="k"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;revenue&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt;
&lt;span class="k"&gt;group&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;insurance_provider&lt;/span&gt;
&lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="k"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt;
&lt;span class="k"&gt;limit&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Partition by&lt;/strong&gt;&lt;br&gt;
It is used with analytic (window) functions to divide the result set into partitions or logical groups, where calculations are independently performed for each partition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;select&lt;/span&gt; 
        &lt;span class="n"&gt;insurance_provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;ntile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;over&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;partition&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;insurance_provider&lt;/span&gt; &lt;span class="k"&gt;order&lt;/span&gt; &lt;span class="k"&gt;by&lt;/span&gt; &lt;span class="n"&gt;total_bill_kes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="k"&gt;group&lt;/span&gt;
&lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;visits&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Over()&lt;/strong&gt;&lt;br&gt;
Over() tells SQL to perform aggregate calculation across a set of rows without removing the individual rows.&lt;/p&gt;
&lt;h3&gt;
  
  
  Sql Joins
&lt;/h3&gt;

&lt;p&gt;A join combines rows from two or more tables based on a related column between them, usually a key that exists in both.&lt;br&gt;
&lt;strong&gt;i. Inner Join&lt;/strong&gt;&lt;br&gt;
Returns all rows from the left table plus matching rows from the right table.&lt;br&gt;
Where there's no match the right table's columns come back as null.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxu3l3ck5z9emwkh2wwjx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxu3l3ck5z9emwkh2wwjx.png" alt=" " width="519" height="410"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;ii. Left Join&lt;/strong&gt;&lt;br&gt;
A left join returns all rows from the left table (the table mentioned before the LEFT JOIN keyword), along with matching rows from the right table. &lt;br&gt;
If there are no matching rows in the right table, NULL values are included in the result set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjf9osvmbjzovs2mldp8f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjf9osvmbjzovs2mldp8f.png" alt=" " width="574" height="379"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;iii. Right Join&lt;/strong&gt;&lt;br&gt;
A right join returns all rows from the right table (the table mentioned after the RIGHT JOIN keyword), along with matching rows from the left table. If there are no matching rows in the left table, NULL values are included in the result set.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fljtxj1crkjzb5xa7o1sd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fljtxj1crkjzb5xa7o1sd.png" alt=" " width="619" height="411"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;iv. Full outer Join&lt;/strong&gt;&lt;br&gt;
A full join returns all rows from both tables, matching rows from both tables where available.&lt;br&gt;
If there is no match, NULL values are included in the result set.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;select 
        D.department_name,
        V.patient_satisfaction_score
from department d
full join visits v
on d.department_id = v.department_id;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;v. Cross Join&lt;/strong&gt;&lt;br&gt;
A cross join returns the Cartesian product of the two tables, meaning it returns all possible combinations of rows from both tables. It doesn't require a join condition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzes0rr0s9h8ok2900f7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzes0rr0s9h8ok2900f7e.png" alt=" " width="382" height="368"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;vi. Self Join&lt;/strong&gt;&lt;br&gt;
It's when a table is joined to itself.&lt;br&gt;
It is useful when records in the same table have relationships with other records in that same table.&lt;/p&gt;
&lt;h3&gt;
  
  
  Common Table Expressions
&lt;/h3&gt;

&lt;p&gt;A Common Table Expression (CTE) is a temporary result set that simplifies and structures SQL queries. &lt;br&gt;
It is defined using the WITH keyword and can improve query readability and reusability&lt;br&gt;
&lt;strong&gt;i. multiple CTEs&lt;/strong&gt;&lt;br&gt;
This is where you create multiple CTEs in the same query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;with doctor_totals as (
    select
        doctor_id,
        SUM(total_bill_kes) AS total_bill
    from visits
    group by  doctor_id
),
average_bill as (
    select
        AVG(total_bill) as avg_bill
    from doctor_totals
)
select
    d.doctor_name,
    dt.total_bill
from doctor_totals dt
join doctors d
    on dt.doctor_id = d.doctor_id
cross join average_bill ab
where dt.total_bill &amp;gt; ab.avg_bill;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ii. Recursive CTEs&lt;/strong&gt;&lt;br&gt;
This type of CTE allows us to work with hierarchical or recursive data structures.&lt;/p&gt;

&lt;p&gt;A CTE can be used to calculate aggregated metrics like total bill, avg_patient satisfaction score and then reused in further calculations or to filter out unnecessary data. &lt;br&gt;
This can optimize performance by avoiding complex aggregation in the main query&lt;/p&gt;
&lt;h3&gt;
  
  
  Subqueries
&lt;/h3&gt;

&lt;p&gt;A subquery is a SQL query written inside another query.&lt;br&gt;
The outer query uses the result of the inner query as part of its logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;i. Scalar Subqueries&lt;/strong&gt;&lt;br&gt;
Returns exactly one row and one column — a single value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;select
    visit_id,
    total_bill_kes
from visits
where total_bill_kes &amp;gt; (
    select AVG(total_bill_kes)
    from visits
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ii. Correlated Subqueries&lt;/strong&gt;&lt;br&gt;
A correlated subquery references columns from the outer query, meaning it is executed once for each row of the outer query.&lt;br&gt;
This makes it more powerful but potentially more expensive.&lt;br&gt;
&lt;strong&gt;iii. Non-Correlated Subqueries&lt;/strong&gt;&lt;br&gt;
A subquery that does not depend on the outer query.&lt;br&gt;
It can run independently of the outer query and usually executes once. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;iv. Nested Subqueries&lt;/strong&gt;&lt;br&gt;
A nested subquery is a subquery inside another subquery.&lt;/p&gt;

</description>
      <category>sql</category>
    </item>
    <item>
      <title>JUMIA PRODUCT PERFORMANCE INTERACTIVE DASHBOARD</title>
      <dc:creator>Tonny Muthuri</dc:creator>
      <pubDate>Fri, 11 Sep 2026 11:19:19 +0000</pubDate>
      <link>https://dev.to/tonny_muthuri_9556958a78f/jumia-product-performance-interactive-dashboard-18a5</link>
      <guid>https://dev.to/tonny_muthuri_9556958a78f/jumia-product-performance-interactive-dashboard-18a5</guid>
      <description>&lt;h1&gt;
  
  
  Introducton
&lt;/h1&gt;

&lt;p&gt;Jumia is an e-commerce platform where different sellers list their products and customers purchase them online. The platform generates data as sellers list products and customers interact with it and purchase products.&lt;br&gt;
In this project, we analyze 112 products listed on Jumia that would give Jumia and its sellers a better understanding of how price, promotions and customer's feedback influence product performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dataset Overview
&lt;/h2&gt;

&lt;p&gt;The dataset contained 6 key fields: Products, current price, Old price, Rating, Reviews and Discount.&lt;br&gt;
I identified several data quality issues like missing values especially on the Rating and Review columns, Some columns such as Current price and Old price were in string/text form and not in their true data type which is supposed to number/currency. &lt;br&gt;
Ratingd header is misspelled.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbkanezjpics1v7cbjmnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbkanezjpics1v7cbjmnb.png" alt="Raw-Data" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Cleaning and preparation
&lt;/h2&gt;

&lt;p&gt;Identifying and removal of duplicates is esential before data analysis this helps to evade inaccuracy.&lt;br&gt;
The other step is to remove Kshs, commas and extra spaces from Current and Old prices columns. Then convert to a number.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;=Value(SUBSTITUTE(SUBSTITUTE(B2,"ksh",""),",",""))&lt;/code&gt;&lt;br&gt;
On Review column we change the negative values to absolute values&lt;br&gt;
&lt;code&gt;IF(E2="","",ABS(VALUE(E2)))&lt;/code&gt;&lt;br&gt;
In Rating we remove "out of 5" to chage its data type to a decimal number.&lt;br&gt;
&lt;code&gt;=IF(F2="","",VALUE(SUBSTITUTE(F2,"out of 5","")))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fugdmm2578fn8ev2ectqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fugdmm2578fn8ev2ectqp.png" alt="Cleaned Data" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Enrichment
&lt;/h2&gt;

&lt;p&gt;To make our dataset more complete and valuable we add  a few columns;&lt;br&gt;
&lt;strong&gt;Discount Amount&lt;/strong&gt;- The amount that a customer saves when a product is sold at a reduced price.&lt;br&gt;
&lt;code&gt;(Old price- current price)&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Rating Category&lt;/strong&gt;- Poor&amp;lt;3, Average- 3-4.5, Excellent&amp;gt;4.5&lt;br&gt;
&lt;code&gt;=IF(F2="","Missing",IF(F2&amp;lt;3,"Poor",IF(F2&amp;lt;=4.5,"Average","Excellent")&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Discount Category&lt;/strong&gt;- Low Discount&amp;lt;20%, Medium Discount=20%-40%, High Discount&amp;gt;40%&lt;br&gt;
&lt;code&gt;=IF(D2="","Missing",IF(D2&amp;lt;20%,"Low Discount",IF(D2&amp;lt;=40%,"Medium Discount","High Discount")))&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Price Category&lt;/strong&gt;- We categorize price based on Quartiles&lt;br&gt;
Q1-493, Q3-1670 &lt;br&gt;
And named their cells as Price_Q1 and Price_Q3&lt;br&gt;
&lt;code&gt;=IF(B2="","Missing",IF(B2&amp;lt;=Price_Q1,"Low Price",IF(B2&amp;lt;=Price_Q3,"Medium Price","High Price")))&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj3fu5g2b23fhs7rjtxwi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj3fu5g2b23fhs7rjtxwi.png" alt=" " width="436" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Analysis
&lt;/h2&gt;

&lt;p&gt;After cleaning and preparing data we moved to analyzing it&lt;/p&gt;

&lt;h3&gt;
  
  
  Deriving KPIs
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Variable&lt;/th&gt;
&lt;th&gt;values&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total products&lt;/td&gt;
&lt;td&gt;112&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Current Price&lt;/td&gt;
&lt;td&gt;Ksh 1,187&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Old Price&lt;/td&gt;
&lt;td&gt;Ksh 1,811&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Discount&lt;/td&gt;
&lt;td&gt;Ksh 624&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Average Rating&lt;/td&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total reviews&lt;/td&gt;
&lt;td&gt;723&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Most Expensive Price&lt;/td&gt;
&lt;td&gt;Ksh 3750-32pcs portable codeless drill&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Least Expensive Price&lt;/td&gt;
&lt;td&gt;Ksh 38- Single head knitting crothet sweater needle set&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Relationship analysis
&lt;/h3&gt;

&lt;p&gt;I created 3 scatter charts and derived R-squared and their correlations.&lt;br&gt;
&lt;strong&gt;Discount vs Reviews&lt;/strong&gt;&lt;br&gt;
The analysis shows weak negative correlation.&lt;br&gt;
Correl=  -0.137&lt;br&gt;
R&lt;sup&gt;2&lt;/sup&gt; = 0.0187&lt;br&gt;
&lt;strong&gt;Current price vs Rating&lt;/strong&gt; &lt;br&gt;
Week positive correlation&lt;br&gt;
Correl=  0.1101&lt;br&gt;
R&lt;sup&gt;2&lt;/sup&gt; =0.0121&lt;br&gt;
&lt;strong&gt;Rating VS Reviews&lt;/strong&gt;&lt;br&gt;
Week Positive correlation&lt;br&gt;
Correl= 0.0572&lt;br&gt;
R&lt;sup&gt;2&lt;/sup&gt;= 0.0033&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkftmihanz40285p80v9o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkftmihanz40285p80v9o.png" alt="Relationship Analysis" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Dashboard Creation
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8q5hsi9abmfea7h6qxf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx8q5hsi9abmfea7h6qxf.png" alt=" " width="520" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The complete workbook, including the raw and cleaned data, analysis sheets, PivotTables, charts, and final interactive dashboard, is available in my GitHub repository below.&lt;br&gt;
&lt;a href="https://github.com/tonnymuthuri6-lang/JUMIA-PRODUCT-PERFORMANCE-DASHBOARD" rel="noopener noreferrer"&gt;https://github.com/tonnymuthuri6-lang/JUMIA-PRODUCT-PERFORMANCE-DASHBOARD&lt;/a&gt;&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>data</category>
      <category>datascience</category>
    </item>
    <item>
      <title>GETTING STARTED WITH EXCEL FOR DATA ANALYTICS: FROM BASICS TO DATA CLEANING.</title>
      <dc:creator>Tonny Muthuri</dc:creator>
      <pubDate>Tue, 01 Sep 2026 05:18:06 +0000</pubDate>
      <link>https://dev.to/tonny_muthuri_9556958a78f/getting-started-with-excel-for-data-analytics-from-basics-to-data-cleaning-1j11</link>
      <guid>https://dev.to/tonny_muthuri_9556958a78f/getting-started-with-excel-for-data-analytics-from-basics-to-data-cleaning-1j11</guid>
      <description>&lt;h1&gt;
  
  
  INTRODUCTION.
&lt;/h1&gt;

&lt;p&gt;Many times, I thought Excel was just a simple tool that could only work on simple tasks. After interacting with it for the past one week, I have come to realize how powerful it is.&lt;br&gt;
So, what exactly is Excel? Excel is a spreadsheet program developed by Microsoft that helps you organize, manage and analyze data.  &lt;/p&gt;
&lt;h3&gt;
  
  
  Excel Use Cases.
&lt;/h3&gt;

&lt;p&gt;-Used in data entry&lt;br&gt;
-Data cleaning&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;br&gt;
-Analyzing data&lt;br&gt;
-Data visualization&lt;/p&gt;
&lt;h3&gt;
  
  
  Overview.
&lt;/h3&gt;

&lt;p&gt;There are many tools and commands displayed on Excel's interface.&lt;br&gt;
&lt;strong&gt;Ribbon&lt;/strong&gt;- It's a toolbar that contains all the commands used in excel.&lt;br&gt;
For example, Home, Formulas, insert, Review, View, Page layout, Draw.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnjlvlpsgxehqv65p1lar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnjlvlpsgxehqv65p1lar.png" alt=" " width="799" height="51"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Terminologies used in Excel.
&lt;/h3&gt;

&lt;p&gt;-Cell- A basic unit of a worksheet where you can enter or display data.&lt;br&gt;
 Each cell has an address that identifies each cell. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3f6joabm2mf4wdochi66.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3f6joabm2mf4wdochi66.png" alt=" " width="223" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-Formula bar- Area above the worksheet where you can view, enter and display formulas.    &lt;/p&gt;

&lt;p&gt;-Rows-This are horizotal lines of cells that run from left to right. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcgwsoeqj2ww37xni0c5z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcgwsoeqj2ww37xni0c5z.png" alt=" " width="800" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-Columns- This are vertical lines of  cells that run from top to bottom in a worksheet.&lt;/p&gt;

&lt;p&gt;-Name box- It contains the address the selected cell.&lt;/p&gt;
&lt;h3&gt;
  
  
  Data Types.
&lt;/h3&gt;

&lt;p&gt;-Numbers- Values that can be used in calculations ie, 2,5,7,54&lt;br&gt;
-Texts-refers to letters, words, sentences or combination of characters&lt;br&gt;&lt;br&gt;
used to describe&lt;br&gt;
-Date- this are values that reprent a specific day, month or year ie. 30/04/2026.&lt;br&gt;
To access data types, highlight column, right click then format cells.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fku0q0xsoz008dgk80eyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fku0q0xsoz008dgk80eyh.png" alt=" " width="333" height="347"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Data Validation
&lt;/h3&gt;

&lt;p&gt;This is typically restricting what a user can enter into a data cell. We use data validation to prevent errors when entering data, to maintain consistency across data set, ensuring correct data type is entered and to improve data quality before analysis &lt;br&gt;
Follow this steps to validate your data:&lt;/p&gt;

&lt;p&gt;-select the column or cells  you want to validate &lt;br&gt;
-On the data ribbon, select &lt;strong&gt;Data&lt;/strong&gt;&lt;br&gt;
-click on &lt;strong&gt;Data Validation&lt;/strong&gt; the choose the validation criteria.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feoc001i0lqp6m2kigb4k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feoc001i0lqp6m2kigb4k.png" alt=" " width="408" height="379"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Data Filtering and Sorting.
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Filtering&lt;/strong&gt;is displaying only the data that meets a specific condition while temporarily hiding the rest.&lt;br&gt;
We use &lt;strong&gt;Sort &amp;amp; Filter&lt;/strong&gt; command to filter.&lt;br&gt;
Types of Filtering:&lt;br&gt;
-Text filtering&lt;br&gt;
-Date filtering&lt;br&gt;
-Number filtering&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sorting&lt;/strong&gt; is arranging data in a particular order ie&lt;br&gt;
-Number sorting- its arranging numbers in a particular order that is ascending or descending.&lt;br&gt;
-Text sorting- its arranging text data in a specific order can be either ascending or descending.&lt;/p&gt;
&lt;h2&gt;
  
  
  Data Preparation and Cleaning.
&lt;/h2&gt;

&lt;p&gt;Data cleaning is one of the most essential steps in data analysis.&lt;br&gt;
Whenever we deal with data, we are bound to encounter data inconsistencies such as duplicate values, missing values or even spelling mistakes.&lt;/p&gt;
&lt;h3&gt;
  
  
  Conditional Formatting
&lt;/h3&gt;

&lt;p&gt;It's an excel feature used to automatically change the appearance of cells based on specific rules or conditions.&lt;br&gt;
Used to identify outliers, trends, patterns,duplicates and missing information&lt;/p&gt;
&lt;h3&gt;
  
  
  Key Functions used in data Cleaning
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Text Functions.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upper() Function- converts texts to uppercase.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmm0td0bw29ndso0nlp6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmm0td0bw29ndso0nlp6m.png" alt=" " width="328" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lower() Function- converts texts to lowercase.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftq59mtwykk8epoxvw5v9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftq59mtwykk8epoxvw5v9.png" alt=" " width="396" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proper() Function- capitalizes the first letter in a word.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8lfo2qcta4jk5cgxvmj7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8lfo2qcta4jk5cgxvmj7.png" alt=" " width="446" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Trim() Function- It removes extra spaces before and after the text.&lt;br&gt;
We use LEN()to count how many characters are in a text&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mid()- used to extract characters in the middle of a text ie. &lt;br&gt;
MID(F2,2,3)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-F2- Representing text &lt;br&gt;
  -2- representing the starting position&lt;br&gt;
  -3-representing the number of characters to be removed. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aggregate Functions.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Product()- Multiplies numbers in a range&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Max()- used t find the highest value in a range&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Median()- Returns the value in the middle for the sorted data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mode()- used to find most frequent value in a range&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conditional Aggregations.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;COUNTIF- used for condiotional counting ie.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;=COUNTIF(E2, E870, "Sales")&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;COUNTIFS()- Used when we have more than one condition ie &lt;br&gt;
finding male employees who have masters&lt;br&gt;
=COUNTIFS(I2:I870,"M",N2:N870,"Masters")&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SUMIF- used to add values that meet a specific criteria&lt;br&gt;
we start with criteria range then sum range.&lt;br&gt;
ie Total employee salary in HR department&lt;br&gt;
SUMIF(E2:E870,"Human Resource", F2:F877)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SUMIFS()- Used in more than two conditions&lt;br&gt;
we start with criteria range, criteria, then the sum range&lt;br&gt;
ie . Salary for females in Human resource department.&lt;br&gt;
SUMIFS(F2:F877,E2:E870,"Human Resource,I2:I870,"F")&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Date/Time Functions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Today()- it returns today's date&lt;br&gt;
ie&lt;br&gt;
=TODAY() click enter.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now()- Gets Todays date and time&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-YEAR()- Used to extract year from a date&lt;br&gt;
ie =YEAR()&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn4ky2gjgiot40ev9pg20.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn4ky2gjgiot40ev9pg20.png" alt=" " width="227" height="223"&gt;&lt;/a&gt;&lt;br&gt;
  -MONTH()- Used to extract a month from date &lt;br&gt;
   -DAY()- Extracts a day from  a date ie.&lt;br&gt;
   =Day()&lt;br&gt;
   -DATEDIF()- Calculates the difference between two dates&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>data</category>
      <category>analytics</category>
    </item>
    <item>
      <title>My First GitHub Project.</title>
      <dc:creator>Tonny Muthuri</dc:creator>
      <pubDate>Sat, 22 Aug 2026 21:47:36 +0000</pubDate>
      <link>https://dev.to/tonny_muthuri_9556958a78f/my-first-github-project-27gp</link>
      <guid>https://dev.to/tonny_muthuri_9556958a78f/my-first-github-project-27gp</guid>
      <description>&lt;h1&gt;
  
  
  Introduction
&lt;/h1&gt;

&lt;p&gt;People, especially beginners, face challenges when making changes to their projects and pushing those changes to Github. Some of the challenges faced include Git command, authentification, configuration etc.&lt;br&gt;
This article aims to explain the process of building a Github project, from creating local directories/folders to uploading the project to Github using Git and secure shell(ssh).&lt;br&gt;
I will use a project titled &lt;strong&gt;Poor Performance in 2025 National Exams&lt;/strong&gt; as a case example to illustrate the steps involved in creating a project.&lt;br&gt;
The process is outlined in the following steps:&lt;/p&gt;
&lt;h3&gt;
  
  
  STEP 1: Creating directories
&lt;/h3&gt;

&lt;p&gt;The first step of a project is to establish a well organized directory structure. This helps keep project files organized logically, making them easier to manage, access and maintain throughout the development process.&lt;br&gt;
We create our project directories within Desktop and OneDrive. &lt;br&gt;
&lt;strong&gt;Desktop&lt;/strong&gt; is basically a special directory used by windows to store files and shortcuts while &lt;strong&gt;OneDrive&lt;/strong&gt; is a microsoft's storage store.&lt;br&gt;
In our case we start by navigating to the desktop directory using Git.&lt;/p&gt;

&lt;p&gt;For example, &lt;code&gt;cd desktop&lt;/code&gt; means 'go to desktop'&lt;br&gt;
Next, Use &lt;strong&gt;&lt;em&gt;ls&lt;/em&gt;&lt;/strong&gt; to list all the directories and files in desktop.&lt;br&gt;
Once you have navigated the desktop directory, Proceed to making your first project directory. &lt;br&gt;
We use &lt;strong&gt;&lt;em&gt;mkdir&lt;/em&gt;&lt;/strong&gt;  commandto create a new directory. &lt;br&gt;
For example,&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;mkdir "Poor-performance-in-2025-National Exam"&lt;/code&gt;&lt;br&gt;
&lt;br&gt;
.&lt;br&gt;
Next, we create additional directories within our newly created project directory. In this case we will create a directory called Data, which will store the datasets required for the analysis.&lt;/p&gt;

&lt;p&gt;For example,&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;mkdir data&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 2: Creating Files
&lt;/h3&gt;

&lt;p&gt;Files are essential part of building a project. In this step, we will create a README.md file.&lt;br&gt;
A README.md gives an overview of the project and describes its purpose, structure and  usage in a clear and understandable way. README.md is written using Markdown language.&lt;br&gt;
we use &lt;strong&gt;&lt;em&gt;touch&lt;/em&gt;&lt;/strong&gt; to create files.&lt;br&gt;
For example,&lt;br&gt;
&lt;br&gt;
 &lt;code&gt;touch README.md&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 3: Printing on README.md
&lt;/h3&gt;

&lt;p&gt;we use &lt;strong&gt;echo&lt;/strong&gt; or &lt;strong&gt;nano&lt;/strong&gt;to add content on README.md file and to describe our project.&lt;br&gt;
In our case example, we will add project title and an overview.&lt;br&gt;
*Using echo&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;echo "# Poor Performance in 2025 National Exam" &amp;gt; README.md&lt;br&gt;
    echo "# Project Overview" &amp;gt;&amp;gt; README.md&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;&amp;gt;&lt;/strong&gt; operator overwrites the file, while &lt;strong&gt;&amp;gt;&amp;gt;&lt;/strong&gt; adds content to the existing file without deleting what is already there.&lt;/p&gt;

&lt;p&gt;*using nano README.md&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;# Poor performance in 2025 National Exams&lt;br&gt;
    ## Project Overview&lt;br&gt;
       This project aims to identify key factors that led to poor academic performance in 2025.&lt;br&gt;
    ## Tools Used&lt;br&gt;
      -Excel&lt;br&gt;
      -Power Bi&lt;br&gt;
      -Python&lt;br&gt;
     ## Challenges Faced&lt;br&gt;
      -Missing Data&lt;br&gt;
      -Outliers&lt;br&gt;
      -Duplicates&lt;br&gt;
      -Data Accessibility&lt;br&gt;
      -Unstructured data&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 4: Commit the project
&lt;/h3&gt;

&lt;p&gt;A commit is a saved checkpoint in the history of repository. It records all the changes that have been made at a particular point in time.&lt;br&gt;
First, we stage all eligible changes.&lt;br&gt;
Using:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit add.&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Once the changes have been staged,we save them as a commit and give a commit message.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git commit -m " Add Poor performance in 2025 National Exam Analysis"&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The -m in our command allows us to provide a message describing the changes included in the commit.&lt;br&gt;
To view the history of commits in our repository we use:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;or to show our commit in a short format&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git log --oneline&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 5: Checking and Connecting Git to Github
&lt;/h3&gt;

&lt;p&gt;Github is an online platform where Git repositories can be stored and shared.&lt;br&gt;
To securely connect Git to Github, we need to usea Secure shell(ssh). SSH is typically a protocal used to create secure connection between Git and Github.&lt;br&gt;
To check whether ssh keys already exists before generating one use:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ls -al ~/.ssh&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;If a SSH key does not already exist, Generate ed25519 ssh key from the Git using:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh-keygen -t ed25519 -C "tonn*********@gmail.com"&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Git generates two keys:&lt;br&gt;
                      -public key &lt;br&gt;
                      -private key&lt;br&gt;
Copy the public one.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cat ~/.ssh/*******.pub&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Add the copied ssh to your Github (Setings &amp;gt; ssh and gpg keys).&lt;br&gt;
Fill in the ssh key form:&lt;br&gt;
          &lt;strong&gt;Title&lt;/strong&gt;- give the key a descriptive name&lt;br&gt;
          &lt;strong&gt;Key type&lt;/strong&gt;- choose authentication key&lt;br&gt;
          &lt;strong&gt;Key&lt;/strong&gt;- paste the copied public ssh key here&lt;br&gt;
Then click add ssh key.&lt;br&gt;
To test the ssh connection you need to return to GitBash and run:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ssh-T git@github.com&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  STEP 6: Connecting Git repository to a remote repository
&lt;/h3&gt;

&lt;p&gt;Open the Github and create a new repository. Once the repository has been created, copy the ssh.&lt;br&gt;
We can then connect our local repository to a remote repository using this command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git remote add origin "paste the ssh here"&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;To check the remote repositories connected to our local Git repository we use this command:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git remote -v&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The final stepis to push (sending changes from Git to Github)&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;git push -u origin main&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;The command uploads the created commits from our local &lt;strong&gt;main&lt;/strong&gt; branch to the Github repository called &lt;strong&gt;Origin&lt;/strong&gt;&lt;br&gt;
The final step is to refresh your github.  &lt;/p&gt;

</description>
      <category>git</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
