Mysql:选择指定点之间的所有数据
Posted
技术标签:
【中文标题】Mysql:选择指定点之间的所有数据【英文标题】:Mysql: Select all data between specified points 【发布时间】:2014-09-20 06:31:31 【问题描述】:我有一个 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
【问题讨论】:
【参考方案1】:只需将其添加到您的 WHERE 子句中:
AND availablePoints BETWEEN 80 AND 99
【讨论】:
#1054 - 'where 子句'中的未知列'availablePoints'【参考方案2】:您可以将BETWEEN
子句用于availablePoints
。随意设置availablePoints
。
【讨论】:
如果我在 where 子句中添加“AND availablePoints BETWEEN 80 AND 99”,那么它会给出 #1054 - 'where 子句'中的未知列 'availablePoints'【参考方案3】:基本上你只需要添加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
标准。 您不能直接引用列别名。
【讨论】:
使用 OUTER JOINS 的结果不正确 \n SELECT user_id FROM ( SELECT user_id, SUM(earned_points) as points FROM tbl_earned_points WHERE 1 GROUP BY user_id ) 作为总结 WHERE points BETWEEN 80 AND 99 from above query我得到 1761 行,从你的查询中我只得到 25 行 @user2046091 -- 它不应该返回相同的结果,它应该只返回 80 到 99 之间的可用点。但是,如果你在没有WHERE
标准的情况下运行它,那么它应该返回相同数量的结果。以上是关于Mysql:选择指定点之间的所有数据的主要内容,如果未能解决你的问题,请参考以下文章