Skip to content

completes lab #86

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 138 additions & 0 deletions publications.sqbpro
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8"?><sqlb_project><db path="/Users/test/Desktop/ironhack_labs/lab-sql-basics/files_for_lab/lab1_bank.sqlite" readonly="0" foreign_keys="1" case_sensitive_like="0" temp_store="0" wal_autocheckpoint="1000" synchronous="2"/><attached/><window><main_tabs open="structure browser pragmas query" current="3"/></window><tab_structure><column_width id="0" width="300"/><column_width id="1" width="0"/><column_width id="2" width="100"/><column_width id="3" width="2280"/><column_width id="4" width="0"/><expanded_item id="0" parent="1"/><expanded_item id="1" parent="1"/><expanded_item id="2" parent="1"/><expanded_item id="3" parent="1"/></tab_structure><tab_browse><table title="account" custom_title="0" dock_id="4" table="4,7:mainaccount"/><dock_state state="000000ff00000000fd0000000100000002000004490000033ffc0100000004fb000000160064006f0063006b00420072006f00770073006500310100000000ffffffff0000000000000000fb000000160064006f0063006b00420072006f00770073006500320100000000000004490000000000000000fb000000160064006f0063006b00420072006f00770073006500330100000000ffffffff0000000000000000fb000000160064006f0063006b00420072006f00770073006500340100000000ffffffff0000010100ffffff0000027e0000000000000004000000040000000800000008fc00000000"/><default_encoding codec=""/><browse_table_settings/></tab_browse><tab_sql><sql name="SQL 1">-- Get the `id` values of the first 5 clients from `district_id` with a value equals to 1.

SELECT client_id
FROM client
WHERE district_id = 1
LIMIT 5;

-- In the `client` table, get an `id` value of the last client where the `district_id` equals to 72.

SELECT client_id
FROM client
WHERE district_id = 72
ORDER BY district_id DESC
LIMIT 1;

-- Get the 3 lowest amounts in the `loan` table.

SELECT amount
FROM loan
ORDER BY amount ASC
LIMIT 3;

--What are the possible values for `status`, ordered alphabetically in ascending order in the `loan` table?

SELECT status
FROM loan
ORDER BY status ASC

-- What is the `loan_id` of the highest payment received in the `loan` table?

SELECT loan_id
FROM loan
WHERE payment = (SELECT MAX(payment) FROM loan);


-- What is the loan `amount` of the lowest 5 `account_id`s in the `loan` table? Show the `account_id` and the corresponding `amount`

SELECT amount, account_id
FROM loan
ORDER BY account_id ASC
LIMIT 5;

-- What are the `account_id`s with the lowest loan `amount` that have a loan `duration` of 60 in the `loan` table?

SELECT account_id, duration
FROM loan
WHERE duration == 60
ORDER BY amount ASC
LIMIT 5;

-- What are the unique values of `k_symbol` in the `order` table?
-- Note: There shouldn't be a table name `order`, since `order` is reserved from the `ORDER BY` clause. You have to use backticks to escape the `order` table name.

SELECT DISTINCT k_symbol FROM `order`;

-- In the `order` table, what are the `order_id`s of the client with the `account_id` 34?

SELECT order_id
FROM `order`
WHERE account_id == 34

-- In the `order` table, which `account_id`s were responsible for orders between `order_id` 29540 and `order_id` 29560 (inclusive)?

SELECT account_id
FROM `order`
WHERE order_id BETWEEN 29540 AND 29560;

-- In the `order` table, what are the individual amounts that were sent to (`account_to`) id 30067122?

SELECT amount
FROM `order`
WHERE account_to = 30067122;

-- In the `trans` table, show the `trans_id`, `date`, `type` and `amount` of the 10 first transactions from `account_id` 793 in chronological order, from newest to oldest.

SELECT trans_id, `date`, type, amount
FROM trans
WHERE account_id = 793
ORDER BY date DESC
LIMIT 10;

-- In the `client` table, of all districts with a `district_id` lower than 10, how many clients are from each `district_id`? Show the results sorted by the `district_id` in ascending order.

SELECT district_id, COUNT(*) AS client_count
FROM client
WHERE district_id &lt; 10
GROUP BY district_id
ORDER BY district_id ASC;

-- In the `card` table, how many cards exist for each `type`? Rank the result starting with the most frequent `type`.

SELECT
type,
COUNT(*) AS type_count,
RANK() OVER (ORDER BY COUNT(*) DESC) AS Rank_no
FROM card
GROUP BY type
ORDER BY Rank_no;

-- Using the `loan` table, print the top 10 `account_id`s based on the sum of all of their loan amounts.

SELECT account_id, SUM(loan_amount) AS total_loan_amount
FROM loan
GROUP BY account_id
ORDER BY total_loan_amount DESC
LIMIT 10;

-- In the `loan` table, retrieve the number of loans issued for each day, before (excl) 930907, ordered by date in descending order.
-- what is the number of loans for each day before 930907, ordered by date in descending order

SELECT
loan_id,
COUNT(*) AS loan_count,
FROM loan
ORDER BY date DESC

SELECT date, COUNT(*) AS loan_count
FROM loan
WHERE date &lt; 930907
GROUP BY date
ORDER BY date DESC;

-- In the `loan` table, for each day in December 1997, count the number of loans issued for each unique loan duration, ordered by date and duration, both in ascending order. You can ignore days without any loans in your output.

SELECT date, duration, COUNT(*) AS loan_count
FROM loan
WHERE date BETWEEN 971201 AND 971231
GROUP BY date, duration
ORDER BY date ASC, duration ASC;

-- In the `trans` table, for `account_id` 396, sum the amount of transactions for each type (`VYDAJ` = Outgoing, `PRIJEM` = Incoming).
-- Your output should have the `account_id`, the `type` and the sum of amount, named as `total_amount`. Sort alphabetically by type.

SELECT account_id, type, SUM(amount) AS total_amount
FROM trans
WHERE account_id = 396
GROUP BY account_id, type
ORDER BY type ASC;</sql><current_tab id="0"/></tab_sql></sqlb_project>
52 changes: 52 additions & 0 deletions solutions.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-- 1
SELECT
authors.au_id AS "Author ID", authors.au_lname AS "Last name", authors.au_fname AS "First name",
titles.title AS "Title",
publishers.pub_name AS "Publisher"

FROM
authors, titles, publishers, titleauthor

WHERE
authors.au_id == titleauthor.au_id AND
titleauthor.title_id == titles.title_id AND
titles.pub_id == publishers.pub_id

-- 2
SELECT
a.au_id AS AUTHOR_ID,
a.au_lname AS LAST_NAME,
a.au_fname AS FIRST_NAME,
p.pub_name AS PUBLISHER,
COUNT(ta.title_id) AS TITLE_COUNT
FROM titleauthor ta
JOIN authors a ON ta.au_id = a.au_id
JOIN titles t ON ta.title_id = t.title_id
JOIN publishers p ON t.pub_id = p.pub_id
GROUP BY a.au_id, a.au_lname, a.au_fname, p.pub_name
ORDER BY a.au_lname, a.au_fname, p.pub_name;

-- Who are the top 3 authors who have sold the highest number of titles? Write a query to find out.

SELECT
a.au_id AS AUTHOR_ID,
a.au_lname AS LAST_NAME,
a.au_fname AS FIRST_NAME,
COUNT(ta.title_id) AS TITLES_SOLD
FROM titleauthor ta
JOIN authors a ON ta.au_id = a.au_id
GROUP BY a.au_id, a.au_lname, a.au_fname
ORDER BY TITLES_SOLD DESC
LIMIT 3;

-- Now modify your solution in Challenge 3 so that the output will display all 23 authors instead of the top 3. Note that the authors who have sold 0 titles should also appear in your output (ideally display `0` instead of `NULL` as the `TOTAL`). Also order your results based on `TOTAL` from high to low.

SELECT
a.au_id AS AUTHOR_ID,
a.au_lname AS LAST_NAME,
a.au_fname AS FIRST_NAME,
COUNT(ta.title_id) AS TOTAL
FROM authors a
LEFT JOIN titleauthor ta ON a.au_id = ta.au_id
GROUP BY a.au_id, a.au_lname, a.au_fname
ORDER BY TOTAL DESC;