166|SQL – The Guild of Gold

Time: 20 minutes
Difficulty: moderate
1.SELECT DISTINCT QuestLeader
FROM Quests;
2.SELECT TypeName, SUM(TreasureValue) AS TotalValue
FROM Treasures INNER JOIN Treasure_Types ON Treasures.TypeID=Treasure_Types.TypeID
GROUP BY TypeName
ORDER BY TotalValue DESC;
3.SELECT TOP 5 q.QuestName, SUM(t.TreasureValue) AS TotalLoot
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY q.QuestName
ORDER BY SUM(t.TreasureValue) DESC
4.SELECT q.QuestLeader, q.QuestName, ROUND(AVG(t.TreasureValue),2) AS AvgTreasureValue
FROM Quests AS q INNER JOIN Treasures as t ON t.QuestID=q.QuestID
GROUP BY QuestLeader, GuestName
ORDER BY ROUND(AVG(t.TreasureValue),2) DESC;
5.SELECT TypeName, Count(t.TypeID) AS CountFound
FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
GROUP BY TypeName
ORDER BY Count(t.TypeID) ASC;
type or paste code here

Time to Complete 25 min
Difficulty: Medium
Q1: SELECT DISTINCT QuestLeader
FROM Quests;

Q2: SELECT TypeName, SUM(TreasureValue) As TotalValue
FROM Treasures As t INNER JOIN Treasure_Types As tr ON tr.TypeID = t.TypeID
GROUP BY TypeName
ORDER BY Sum(TreasureValue) DESC;

Q3: SELECT TOP 5 q.QuestName, SUM(t.TreasureValue) AS TotalLoot
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY q.QuestName
ORDER BY SUM(t.TreasureValue) DESC;

Q4: SELECT QuestLeader, QuestName, Round(Avg(TreasureValue), 2) AS AvgTreasureValue
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY QuestLeader, QuestName
ORDER BY Avg(TreasureValue) DESC;

Q5: SELECT TypeName, COUNT(T.TypeID) AS CountFound
FROM Treasures AS T INNER JOIN Treasure_Types AS TT ON T.TypeID = TT.TypeID
GROUP BY TypeName
ORDER BY COUNT(T.TypeID);

Time to Complete: 20 min
Difficulty: Intermediate
Solution:

  1. SELECT DISTINCT QuestLeader
    FROM Quests;
  2. SELECT TypeName, SUM(TreasureValue) AS TotalValue
    FROM Treasures AS t
    INNER JOIN Treasure_types AS tt on t.typeID = tt.typeID
    GROUP BY TypeName
    ORDER BY SUM(TreasureValue) DESC;
  3. SELECT TOP 5 QuestName, SUM(TreasureValue) as TotalLoot
    FROM Quests as q
    INNER JOIN Treasures as t ON t.QuestID = q.QuestID
    GROUP BY QuestName
    ORDER BY SUM(TreasureValue) DESC;
  4. SELECT QuestLeader, QuestName, Round(Avg(TreasureValue), 2) as AvgTreasureValue
    FROM Quests as q
    INNER JOIN Treasures as t on t.questID = q.questID
    GROUP BY QuestLeader, QuestName
    ORDER BY Avg(TreasureValue) DESC;
  5. SELECT TypeName, COUNT(t.TypeID) as CountFound
    FROM Treasures as t
    INNER JOIN Treasure_types as tr on t.typeID = tr.typeID
    GROUP BY TypeName
    ORDER BY COUNT(t.TypeID);

Time: 35 minutes
Difficulty: medium

1: SELECT DISTINCT QuestLeader
FROM Quests;

2: SELECT Treasure_Types.TypeName, SUM (Treasures.TreasureValue) AS TotalValue
FROM Treasures
INNER JOIN Treasure_Types ON Treasures.TypeID = Treasure_Types.TypeID
GROUP BY Treasure_Types.TypeName
ORDER BY SUM (Treasures.TreasureValue) DESC;

3: SELECT TOP 5 QuestName, Sum(TreasureValue) AS TotalLoot
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY QuestName
ORDER BY Sum(TreasureValue) DESC;

4: SELECT q.QuestLeader, q.QuestName, Round(AVG(t.TreasureValue),2) AS AvgTreasureValue
FROM Treasures AS t
INNER JOIN Quests AS q ON t.QuestID = q.QuestID
GROUP BY q.QuestLeader, q.QuestName, AvgTreasureValue
ORDER BY AVG(TreasureValue) DESC;

5: SELECT TypeName, COUNT(t.TypeID) AS CountFound
FROM Treasure_Types tt
INNER JOIN Treasures t ON tt.TypeID = t.TypeID
GROUP BY TypeName
ORDER BY COUNT(t.TypeID);

Time: 30 minutes
Difficulty: medium
Solutions:

Q1:
SELECT QuestLeader
FROM Quests;

Q2:
SELECT TypeName, sum(TreasureValue) AS TotalValue
FROM Treasures INNER JOIN Treasure_Types ON Treasures.TypeID=Treasure_Types.TypeID
GROUP BY TypeName
ORDER BY sum(TreasureValue) DESC;

Q3:
SELECT Quests.QuestName, Sum(Treasures.TreasureValue) AS TotalLoot
FROM Quests INNER JOIN Treasures ON Quests.QuestID=Treasures.QuestID
GROUP BY Quests.QuestName
ORDER BY Sum(Treasures.TreasureValue)
LIMIT 5;

Q4:
SELECT QuestLeader, QuestName, round(avg(TreasureValue), 2) AS AvgTreasureValue
FROM Quests INNER JOIN Treasures ON Quests.QuestID=Treasures.QuestID
GROUP BY QuestLeader, QuestName
ORDER BY avg(TreasureValue) DESC

Q5:
SELECT Treasure_Types.TypeName, count(Treasures.TypeID) AS CountFound
FROM Treasure_Types INNER JOIN Treasures ON Treasures.TypeID=Treasure_Types.TypeID
GROUP BY Treasure_Types.TypeName
ORDER BY count(Treasures.TypeID) DESC

Time: 25 mins
Difficulty: Intermediate
Solution:

1.SELECT DISTINCT QuestLeader
FROM Quests;

2.SELECT TypeName AS Expr1, Sum(t.TreasureValue) AS TotalValue
FROM Treasures AS t INNER JOIN Treasure_Types AS tr ON t.TypeID = tr.TypeID
GROUP BY tr.TypeName
ORDER BY Sum(t.TreasureValue) DESC;

3.SELECT TOP 5 QuestName, Sum(TreasureValue) AS TotalLoot
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY QuestName
ORDER BY Sum(TreasureValue) DESC;

4.SELECT QuestLeader, QuestName, Round(Avg(TreasureValue), 2) AS AvgTreasureValue
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY QuestLeader, QuestName
ORDER BY Avg(TreasureValue) DESC;

5.SELECT TypeName, COUNT(t.TypeID) AS CountFound
FROM Treasures AS t INNER JOIN Treasure_Types AS tr ON t.TypeID = T=tr.TypeID
GROUP BY TypeName
ORDER BY COUNT(t.TypeID);

Time to Complete: 30 minutes
Difficulty: Intermediate

  1. SELECT DISTINCT QuestLeader
    FROM Quests;
  2. SELECT TypeName, Sum(TreasureValue) AS TotalValue
    FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
    GROUP BY TypeName
    ORDER BY Sum(TreasureValue) DESC;
  3. SELECT TOP 5 QuestName, Sum(TreasureValue) AS TotalLoot
    FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
    GROUP BY QuestName
    ORDER BY Sum(TreasureValue) DESC;
  4. SELECT QuestLeader, QuestName, Round(Avg(TreasureValue), 2) AS AvgTreasureValue
    FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
    GROUP BY QuestLeader, QuestName
    ORDER BY Avg(TreasureValue) DESC;
  5. SELECT TypeName, Count(t.TypeID) AS CountFound
    FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
    GROUP BY TypeName
    ORDER BY Count(t.TypeID);

Time to Complete: 30 Minutes
Difficulty: Intermediate
Solution:
1: SELECT DISTINCT QuestLeader

FROM Quests;

2: SELECT tt.TypeName, SUM(T.treasurevalue) AS Total_Value

FROM Treasures t

INNER JOIN Treasure_Types tt ON T.typeid = tt.typeid

group by tt.typename

ORDER BY SUM(TreasureValue) DESC;

3:SELECT TOP 5 QuestName, Sum(TreasureValue) AS TotalLoot

FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID

GROUP BY QuestName

ORDER BY Sum(TreasureValue) DESC;

4:SELECT q.QuestLeader, q.QuestName, ROUND(AVG(t.treasurevalue),2) as AvgTreasureValue

FROM Quests q INNER JOIN treasures t on t.QuestID = q.QuestID

group by q.QuestLeader, q.QuestName

order by AVG(treasurevalue) DESC;

5:SELECT tt.TypeName, Count(t.TypeID) AS CountFound

FROM Treasures t

INNER JOIN Treasure_Types tt ON t.TypeID = tt.TypeID

GROUP BY tt.TypeName

ORDER BY Count(t.TypeID);

Time: 20 Min
Difficulty: Medium
Solutions: See Below

Select Distinct QuestLeader
From Quests;
2)
Select TypeName, Sum(TreasureValue) AS TotalValue
From Treasures Inner join Treasure_Types on t.TypeID = tt.TypeID
Group by TypeName
order by Sum(TreasureValue) DESC;
3)
Select top 5 QuestName, Sum(TreasureValue) AS TotalLoot
From Quests Inner join Treasures on t.QuestID = q.QuestID
Group by QuestName
Order by Sum(TreasureValue) DESC;
4)_
Select QuestLeader, QuestName, Round(Avg(TreasureValue), 2) AS AvgTreasureValue
From Quests Inner join Treasures on t.QuestID = q.QuestID
Group by QuestLeader, QuestName
order by Avg(TreasureValue) DESC;
5)
Select TypeName, Count(t.TypeID) AS CountFound
From Treasures Inner join Treasure_Types on t.TypeID = tt.TypeID
Group by TypeName
Order by Count(t.TypeID);

Time to Complete: 20 mins
Rating: Intermediate
Solutions:

  1. SELECT DISTINCT QuestLeader
    FROM Quests;

  2. SELECT tt.TypeName, SUM(t.TreasureValue) AS TotalValue
    FROM Treasure_Types tt
    INNER JOIN Treasures t ON tt.TypeID = t.TypeID
    GROUP BY TypeName
    ORDER BY SUM(t.TreasureValue) DESC;

  3. SELECT TOP 5 q.QuestName, Sum(t.TreasureValue) AS TotalLoot
    FROM Quests q
    INNER JOIN Treasures t ON q.QuestID = t.QuestID
    GROUP BY QuestName
    ORDER BY Sum(TreasureValue) DESC;

  4. SELECT q.QuestLeader, q.QuestName, ROUND(AVG(t.TreasureValue), 2) AS AvgTreasureValue
    FROM Quests q
    INNER JOIN Treasures t ON q.QuestID = t.QuestID
    GROUP BY q.QuestLeader, q.QuestName
    ORDER BY AVG(t.TreasureValue) DESC;

  5. SELECT tt.TypeName, COUNT(t.TypeID) AS CountFound
    FROM Treasure_Types tt
    INNER JOIN Treasures t ON tt.TypeID = t.TypeID
    GROUP BY tt.TypeName
    ORDER BY COUNT(t.TypeID);

Time to complete: 30 mins
Difficulty: Easy
Solution:

Question 1
SELECT DISTINCT q.Field3 AS QuestLeader
FROM Quests q;

Question 2
SELECT tt.TypeName, SUM(t.TreasureValue) AS TotalValue
FROM Treasures t
INNER JOIN Treasure_Types tt ON tt.TypeID=t.TypeID
GROUP BY tt.TypeName
ORDER BY SUM(t.TreasureValue) DESC;

Question 3
SELECT TOP 5 q.Field2 AS QuestName, SUM(t.TreasureValue) AS TotalLoot
FROM Quests q
INNER JOIN Treasures t ON q.QuestID=t.QuestID
GROUP BY q.Field2
ORDER BY SUM(t.TreasureValue) DESC;

Question 4
SELECT q.QuestLeader, q.QuestName, ROUND(AVG(t.TreasureValue),2) AS AvgTreasureValue
FROM Treasures t INNER JOIN Quests q ON q.QuestID=t.QuestID
GROUP BY q.QuestLeader, q.QuestName
ORDER BY ROUND(AVG(t.TreasureValue),2) DESC;

Question 5
SELECT TypeName, Count(t.TypeID) AS CountFound
FROM Treasures t INNER JOIN Treasure_Types tt ON t.TypeID = tt.TypeID
GROUP BY TypeName
ORDER BY Count(t.TypeID);

Time: 25 Minutes
Difficulty: Beginner
Notes: I had some difficulty with the access file not sure if it was something wrong with the file or something wrong on my end.

Question 1:
SELECT DISTINCT QuestLeader
FROM Quests

Question 2:
SELECT TypeName, SUM(TreasureValue) AS TotalValue
FROM Treasures
INNER JOIN Treasure_Types ON Treasures.TypeID = Treasure_Types.TypeID
GROUP BY TypeName
ORDER BY Sum(TreasureValue)DESC;

Question 3:
SELECT TOP 5 QuestName, Sum(TreasureValue) AS TotalLoot
FROM Quests
INNER JOIN Treasures ON Quests.QuestID = Treasures.QuestID
GROUP BY QuestName
ORDER BY Sum(TreasureValue) DESC;

Question 4:
SELECT QuestLeader, QuestName, ROUND(AVG(TreasureValue), 2) AS AvgTreasureValue
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY QuestLeader, QuestName
ORDER BY ROUND(AVG(TreasureValue)) DESC

Question 5:
SELECT TypeName, Count(t.TypeID) AS CountFound
FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
GROUP BY TypeName
ORDER BY Count(t.TypeID);

  1. SELECT DISTINCT QuestLeader
    FROM Quests;

  2. SELECT TypeName, SUM(TreasureValue) AS TotalValue
    FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
    GROUP BY TypeName
    ORDER BY SUM(TreasureValue) DESC;

  3. SELECT TOP 5 QuestName, Sum(TreasureValue) AS TotalLoot
    FROM Quests INNER JOIN Treasures ON Quests.QuestID = Treasures.QuestID
    GROUP BY QuestName
    ORDER BY Sum(TreasureValue) DESC;

  4. SELECT QuestLeader, QuestName, Round(Avg(TreasureValue),2) AS AvgTreasureValue
    FROM Quests AS q INNER JOIN Treasures AS t ON q.QuestID = t.QuestID
    GROUP BY QuestLeader, QuestName
    ORDER BY Avg(TreasureValue) DESC;

  5. SELECT TypeName, Count(t.TypeID) AS CountFound
    FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
    GROUP BY TypeName
    ORDER BY Count(t.TypeID);

Time to Complete: 20
Difficulty: Intermediate

Solution
1)
SELECT DISTINCT QuestLeader
FROM Quests

SELECT TypeName, SUM(TreasureValue) as TotalValue

FROM Treasures as t

INNER JOIN Treasure_Types as tt on t.type_id = tt.type_id

GROUP BY typename

ORDER BY SUM(treasurevalue) desc;

SELECT TOP 5 QuestName, SUM(TreasureValue) as TotalLoot

FROM Quests as q

INNER JOIN Treasures as t ON t.quest_id=q.questID

GROUP BY QuestName

ORDER BY Sum(TreasureValue) desc;

SELECT QuestLeader, QuestName, ROUND(Avg(TreasureValue),2) as AVGTreasureValue

FROM Quests as q

INNER JOIN Treasures as t on t.quest_id = q.quest_id
GROUP BY QuestLeader, QuestName

ORDER BY Avg(TreasureValue) desc;

SELECT TypeName, COUNT(t.type_id) as CountFound

FROM Treasures as t

INNER JOIN treasure_types as tt ON t.type_id = tt.type_id

GROUP BY typename

ORDER BY Count(t.type_id) asc;

Time to complete: 25 Minutes
Level: Beginner
Results: Below

  1. SELECT Distinct QuestLeader
    From Quests ;
  2. SELECT TypeName, Sum(TreasureValue) AS TotalValue
    From Treasures AS t
    Inner Join Treasure_Type AS tr ON t.TypeID=tr.TypeID
    Group By TypeName
    Order By Sum(TresaureValue) DESC;
  3. SELECT Top 5 QuestName, Sum(TreasureValue) AS TotalLoot
    From Quests AS q
    Inner Join Treasures AS t ON t.QuestID=q.QuestID
    Group By QuestName
    Order By Sum(TreasureValue) DESC;
  4. SELECT QuestLeader, QuestName, Round(Avg(TreasureValue), 2) AS AvgTreasureValue
    From Quests AS q
    Inner Join Treasures AS t ON t.QuestID=q.QuestID
    Group By QuestLeader, QuestName
    Order By Avg(TreasureValue) DESC;
  5. SELECT TypeName, Count(t.TypeID) AS CountFound
    From Treasures AS t
    Inner Join Treasure_Types AS tt ON t.typeID=tt.TypeID
    Group By TypeName
    Order By Count(t.TypeID);

Time: 18 mins
Difficulty: Easy
Comments: NA
Solution:

1.)
SELECT DISTINCT QuestLeader
FROM Quests;
2.)
SELECT TypeName, Sum(TreasureValue) AS TotalValue
FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
GROUP BY TypeName
ORDER BY Sum(TreasureValue) DESC;
3.)
SELECT TOP 5 QuestName, Sum(TreasureValue) AS TotalLoot
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY QuestName
ORDER BY Sum(TreasureValue) DESC;
4.)
SELECT QuestLeader, QuestName, Round(Avg(TreasureValue), 2) AS AvgTreasureValue
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
GROUP BY QuestLeader, QuestName
ORDER BY Avg(TreasureValue) DESC;
5.)
SELECT TypeName, Count(t.TypeID) AS CountFound
FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
GROUP BY TypeName
ORDER BY Count(t.TypeID);

Time: 30 mins
Difficulty: Intermediate

  1. SELECT DISTINCT QuestLeader
    FROM Quests;
  2. SELECT TypeName, SUM(TreasureValue) AS TotalValue
    FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
    GROUP BY TypeName
    ORDER BY SUM(TreasureValue) DESC;
  3. SELECT TOP 5 QuestName, SUM(TreasureValue) AS TotalLoot
    FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
    GROUP BY QuestName
    ORDER BY Sum(TreasureValue) DESC;
  4. SELECT QuestLeader, QuestName, Round(Avg(TreasureValue), 2) AS AvgTreasureValue
    FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
    GROUP BY QuestLeader, QuestName
    ORDER BY AVG(TreasureValue) DESC;
  5. SELECT TypeName, Count(t.TypeID) AS CountFound
    FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID = tt.TypeID
    GROUP BY TypeName
    ORDER BY Count(t.TypeID);

Time: 30 min
Difficulty: Intermediate
Solution:

  1. SELECT DISTINCT Field3 AS QuestLeader
    FROM Quests;
  2. SELECT tt.TypeName, SUM(t.TreasureValue) AS TotalValue
    FROM Treasure_Types AS tt INNER JOIN Treasures AS t ON tt.TypeID = t.TypeID
    GROUP BY tt.TypeName;
  3. SELECT TOP 5 q.QuestName, Sum(t.TreasureValue) AS TotalLoot
    FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
    GROUP BY q.QuestName
    ORDER BY Sum(t.TreasureValue) DESC;
  4. SELECT q.QuestLeader, q.QuestName, Round(Avg(t.TreasureValue), 2) AS AvgTreasureValue
    FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID = q.QuestID
    GROUP BY q.QuestLeader, q.QuestName
    ORDER BY Avg(t.TreasureValue) DESC;
  5. SELECT tt.TypeName, COUNT(t.TypeID) AS CountFound
    FROM Treasures AS t
    INNER JOIN Treasure_Types tt ON t.TypeID = tt.TypeID
    GROUP BY tt.TypeName;

Time To Complete: 30 minutes
Difficulty: Intermediate
Solution:
Query 1
SELECT DISTINCT QuestLeader
FROM Quests;
Query 2
SELECT TypeName, SUM(TreasureValue), AS TotalValue
FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID=tt.TypeID
GROUP BY TypeName
ORDER BY SUM(TreasureValue) DESC;
Query 3
SELECT TOP 5 QuestName, SUM(TreasureValue) AS TotalLoo
FROM Quests AS q INNER JOIN Treasures AS t ON q.QuestID=t.QuestID
GROUP BY QuestName
ORDER BY SUM(TreasureValue) DESC;
Query 4
SELECT QuestLeader, QuestName, Round(Avg(TreasureValue),2) AS AvgTreasureValue
FROM Quests AS q INNER JOIN Treasures AS t ON t.QuestID=q.QuestID
GROUP BY QuestLeader, QuestName
ORDER BY Avg(TreasureValue) DESC;
Query 5
SELECT TypeName, Count(t.TypeID) AS CountFound
FROM Treasures AS t INNER JOIN Treasure_Types AS tt ON t.TypeID=tt.TypeID
GROUP BY TypeName
ORDER BY Count(t.TypeID);

Time to complete: 30 min
Rating: Beginner

  1. SELECT DISTINCT QuestLeader
    FROM Quests;

  2. SELECT tt.TypeName, SUM(ts.TreasureValue) AS TotalValue
    From Treasure_Types AS tt
    INNER JOIN Treasures AS ts ON tt.TypeID=ts.TypeID
    GROUP BY tt.TypeName
    ORDER BY SUM(ts.TreasureValue) DESC;

  3. SELECT TOP 5 q.QuestName, SUM(t.TreasureValue) AS TotalLoot
    FROM Quests q
    INNER JOIN Treasures t ON q.QuestID=t.QuestID
    GROUP BY q.QuestName
    ORDER BY SUM(t.TreasureValue) DESC;

  4. SELECT q.QuestLeader, q.QuestName, ROUND(AVG(t.TreasureValue),2) AS AvgTreasureValue
    FROM Quests q
    INNER JOIN Treasures t ON q.QuestID=t.QuestID
    GROUP BY q.QuestLeader, q.QuestName
    ORDER BY ROUND(AVG(t.TreasureValue),2) DESC;

  5. SELECT tt.TypeName, COUNT(t.TypeID) AS CountFound
    FROM Treasure_Types tt
    INNER JOIN Treasures t ON tt.TypeID=t.TypeID
    GROUP BY tt.TypeName
    ORDER BY COUNT(t.TypeID) ASC;