hiling_go/db/queries/locations.sql
2023-09-17 16:30:37 +07:00

58 lines
2.2 KiB
SQL

-- name: GetListLocations :many
SELECT * FROM locations;
-- name: GetListRecentLocationsWithRatings :many
SELECT
l.id,
name,
thumbnail,
re.regency_name,
(SELECT COALESCE(SUM(score), -1) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_score,
(SELECT COUNT(id) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_count,
(SELECT COALESCE(SUM(score), -1) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_score,
(SELECT COUNT(id) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_count
FROM locations l
JOIN regencies re on re.id = l.regency_id
WHERE approved_by IS NOT NULL
ORDER BY l.created_at ASC
LIMIT $1;
-- https://fulmicoton.com/posts/bayesian_rating/
-- SELECT
-- *,
-- (SELECT 5 * 4 + coalesce(critic_score, 0) * coalesce(critic_count, 0) / 5 + coalesce(critic_count, 0)) as critic_bayes,
-- (SELECT 50 + coalesce(user_score, 0) * coalesce(user_count, 0) / 50 + coalesce(user_count, 0)) as user_bayes,
-- ((SELECT 50 + coalesce(user_score, 0) * coalesce(user_count, 0) / 50 + coalesce(user_count, 0)) + (SELECT 5 * 4 + coalesce(critic_score, 0) * coalesce(critic_count, 0) / 5 + coalesce(critic_count, 0)) ) / 2 as avg_bayes
-- FROM (
-- SELECT
-- l.id,
-- name,
-- thumbnail,
-- re.regency_name,
-- (SELECT SUM(score) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_score,
-- (SELECT COUNT(id) from reviews re where re.is_from_critic = true and re.location_id = l.id) as critic_count,
-- (SELECT SUM(score) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_score,
-- (SELECT COUNT(id) from reviews re where re.is_from_critic = false and re.location_id = l.id) as user_count
-- FROM locations l
-- JOIN regencies re on re.id = l.regency_id
-- WHERE approved_by IS NOT NULL) iq1
-- ORDER BY avg_bayes DESC
-- LIMIT $1
-- OFFSET $2;
-- name: GetLocation :one
SELECT * FROM locations
WHERE id = $1;
-- name: CreateLocation :exec
INSERT INTO locations(
address,
name,
submitted_by,
regency_id,
google_maps_link
) values (
$1, $2, $3, $4, $5
);