Mysql: выбрать все данные между указанными точками

У меня есть таблицы MySQL с данными, связанными с точками. как это:

tbl_user

tbl_earned_points

tbl_used_points

У меня есть запрос MySQL, который выбирает данные доступных точек. Это запрос:

SELECT
user.user_email_id AS userEmailId,
IFNULL(SUM(earn_points.earned_points),0) AS lifeTimePoints,
IFNULL((SUM(earn_points.earned_points) - (SELECT IFNULL(SUM(used_points.points_used),0) FROM tbl_used_points AS used_points WHERE used_points.user_id=earn_points.user_id)),0) AS availablePoints
FROM tbl_earned_points AS earn_points
RIGHT JOIN tbl_user AS user ON earn_points.user_id=user.user_id WHERE user.user_email_id <> '' AND user.user_email_id <> '0'
GROUP BY user.user_email_id
ORDER BY availablePoints ASC

Из вышеприведенного запроса я получаю все письма & результат как

userEmailId              lifeTimePoints     availablePoints
samal07@gmail.com        1745               1500
mistyorr_20@yahoo.com    100                75
bsfar@yahoo.com          85                 85
tgray@gmail.com          94                 90
lori_bag@yahoo.com       547                450

Моя проблема в том, что мне нужно только получить доступные строки от 80 до 99.

Так что мой запрос будет выглядеть как

 userEmailId        lifeTimePoints      availablePoints
bsfar@yahoo.com        85              85
tgray@gmail.com        94              90

0

Решение

Просто добавьте это в ваше предложение WHERE:

AND availablePoints BETWEEN 80 AND 99
0

Другие решения

ты можешь использовать BETWEEN пункт для availablePoints, Установите свой availablePoints что вы хотите.

0

По сути, вам просто нужно добавить WHERE критерии. Однако вы также можете переписать свой запрос, чтобы удалить коррелированный подзапрос и просто использовать OUTER JOINs:

SELECT  u.user_email,
COALESCE(e.points,0) lifeTimePoints,
COALESCE(a.points,0) availablePoints
FROM tbl_user AS u
LEFT JOIN (
SELECT SUM(earned_points) points, user_id
FROM tbl_earned_points
GROUP BY user_id
) e ON u.user_id = e.user_id
LEFT JOIN (
SELECT SUM(points_used) points, user_id
FROM tbl_used_points
GROUP BY user_id
) a ON u.user_id = a.user_id
WHERE a.points between 80 and 99

Если вы предпочитаете использовать существующий запрос, вам нужно либо обернуть его в подзапрос и использовать псевдоним столбца (availablepoints), или вам нужно будет использовать весь IFNULL утверждение в вашем WHERE критерии. Вы не можете ссылаться на псевдоним столбца напрямую.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector