Welcome to Subscribe On Youtube

1613. Find the Missing IDs

Description

Table: Customers

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| customer_id   | int     |
| customer_name | varchar |
+---------------+---------+
customer_id is the column with unique values for this table.
Each row of this table contains the name and the id customer.

 

Write a solution to find the missing customer IDs. The missing IDs are ones that are not in the Customers table but are in the range between 1 and the maximum customer_id present in the table.

Notice that the maximum customer_id will not exceed 100.

Return the result table ordered by ids in ascending order.

The result format is in the following example.

 

Example 1:

Input: 
Customers table:
+-------------+---------------+
| customer_id | customer_name |
+-------------+---------------+
| 1           | Alice         |
| 4           | Bob           |
| 5           | Charlie       |
+-------------+---------------+
Output: 
+-----+
| ids |
+-----+
| 2   |
| 3   |
+-----+
Explanation: 
The maximum customer_id present in the table is 5, so in the range [1,5], IDs 2 and 3 are missing from the table.

Solutions

example sql:

-- Define the CTE expression name and column list.  
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)  
AS  
-- Define the CTE query.  
(  
    SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear  
    FROM Sales.SalesOrderHeader  
    WHERE SalesPersonID IS NOT NULL  
)  
-- Define the outer query referencing the CTE name.  
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear  
FROM Sales_CTE  
GROUP BY SalesYear, SalesPersonID  
ORDER BY SalesPersonID, SalesYear;
  • # Write your MySQL query statement below
    
    WITH RECURSIVE CTE AS(
        SELECT 1 AS 'id', MAX(c.customer_id) AS 'Max_Id'
        FROM Customers c
        UNION ALL
        SELECT id+1, Max_Id
        FROM CTE
        WHERE id < Max_id
    )
    
    SELECT id AS 'ids'
    FROM CTE c
    WHERE c.id NOT IN (SELECT customer_id FROM Customers)
    ORDER BY 1 ASC
    
    --
    
    WITH RECURSIVE
        t AS (
            SELECT
                1 AS n
            UNION ALL
            SELECT
                n + 1
            FROM t
            WHERE n < 100
        )
    SELECT
        n AS ids
    FROM t
    WHERE
        n < (
            SELECT
                MAX(customer_id)
            FROM Customers
        )
        AND n NOT IN (
            SELECT
                customer_id
            FROM Customers
        );
    
    

All Problems

All Solutions