GET top 10 using sql in access joining tables

These are my tables:

table BUSINESS

 BUSINESSUSERNAME|BUSINESSPASSWORD|BUSINESSNAME|
 Res1            |123             |Cafe        |
 Res2            |456             |Foodtruck   |

table USER

 USERNAME|USERPASSWORD|NAME|
 user1   |123         |mr.1|
 user2   |234         |mr.2|

table FOOD

FOODID|FOODNAME|FOODPRICE|BUSINESSUSERNAME|
1     |CAKE    | 5       |Res1            |
2     |SHAKE   | 2       |Res2            |
3     |COLA    | 3       |Res1            |

table FOOD_RATING

FOODREVIEWID|FOODID|FOODRATING|BUSINESSUSERNAME|USERNAME|
1           |2     |3         |Res2            |user1   |
2           |2     |5         |Res2            |user2   |
3           |1     |4         |Res1            |user1   |
4           |3     |1         |Res1            |user1   |

I would like to get the top 10 foods based on average rating:

RANK|FOODNAME|FODPRICE|AVGRATING|BUSINESSUSERNAME
 1   |CAKE     |5       |4        |Res1
 2   |SHAKE    |3       |4        |Res2
 3   |COLA     |3       |1        |Res1
 .
 .
 .
10

Upvotes: 0

Views: 43

Answers (1)

Morpheus
Morpheus

Reputation: 1634

EDIT: Added SELECT TOP 10

The ORDER BY comes after GROUP BY

SELECT TOP 10 FOOD.FOODNAME, FOOD.FOODPRICE
 , IIF(Round(Avg(FOODRATING), 1) IS NULL, 0, Round(Avg(FOODRATING), 1)) AS FOODAVGRATING
FROM FOOD
LEFT JOIN FOOD_REVIEW ON FOOD.FOODID = FOOD_REVIEW.FOODID
WHERE (((FOOD.BUSINESSUSERNAME) = "someusername"))
GROUP BY FOOD.FOODNAME, FOOD.FOODPRICE
ORDER BY IIF(Round(Avg(FOODRATING), 1) IS NULL, 0, Round(Avg(FOODRATING), 1)) DESC;

Upvotes: 1

Related Questions