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
- CTE stands for common table expression
- example: https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql?view=sql-server-ver15#examples
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 );