рассчитать проценты в один выбор - PullRequest
0 голосов
/ 14 октября 2019

Я хочу подсчитать, какой процент пользователей, которые создали резервирование в SitDownRestaurant, какой процент рекомендовал пользователь SitDownRestaurant?

Я пробовал это, но я не понимаю, как это сделать. найти проценты от него:

select reservations.UserName 
from reservations, sitdownrestaurant 
where reservations.RestaurantId = sitdownrestaurant.RestaurantId 
and reservations.UserName in (
  select recommendations.UserName 
  from recommendations, sitdownrestaurant 
  where recommendations.RestaurantId = sitdownrestaurant.RestaurantId
);

1 Ответ

0 голосов
/ 14 октября 2019

ОК, поэтому мы берем внутреннее соединение между sitdownrestaurant и reservations.

Мы делаем левое внешнее соединение с рекомендациями. Если мы сделали внутреннее объединение с рекомендациями, мы хотим, чтобы каждый пользователь имел как оговорку, так и рекомендацию. Однако, поскольку нам нужны записи для всех бронирований, даже без рекомендаций, вместо этого мы используем внешнее объединение.

Затем мы группируемся по ресторану. Если мы сделаем count(recommendations.RestaurantId), это будет считать все ненулевые значения в группе. Поскольку внешнее объединение будет использовать NULL, когда не было соответствующей записи, это будет число рекомендаций.

Однако count(sitdownrestaurant.RestaurantId) будет подсчетом всех записей.

Итакпроцент будет равен количеству рекомендаций, деленному на общее количество записей для ресторана. (Вы можете умножить это на 100, чтобы получить процент.)

select count(recommendations.RestaurantId)/count(sitdownrestaurant.RestaurantId)
from sitdownrestaurant
  inner join reservations
    on reservations.RestaurantId = sitdownrestaurant.RestaurantId
  left outer join recommendations
    on recommendations.RestaurantId = sitdownrestaurant.RestaurantId
    and recommendations.UserName = reservations.UserName
group by sitdownrestaurant.RestaurantId
...