0

我有一个如下所示的查询:

select uid,leadcount,salescount,leadcount/salescount as diff from 
(
SELECT x.uid, COUNT(*) leadcount, COUNT(DISTINCT x.fid)
FROM total_leads AS x
WHERE x.uid BETWEEN 1 AND 5
GROUP BY x.uid
) t1 left join 
(
SELECT ud.UserId, COUNT(*) salescount, COUNT(DISTINCT ud.SalesID)
FROM total_sales AS ud
WHERE ud.UserId BETWEEN 1 AND 5
GROUP BY ud.UserID
) t2 on t1.uid=t2.UserId

结果是:

在此处输入图像描述

我试图仅显示diff大于的结果2.5(因此在这种情况下,输出中应该只有uid 5 个可见)。

我尝试使用WHERE diff >= 2.5但我得到了"You have an error in your SQL syntax"

MySQL的工作示例

4

2 回答 2

2

只需在子句中重复原始表达式,WHERE而不是使用别名:

SELECT uid leadcount, salescount, leadcount/salescount AS diff
FROM
(
    ...
) t
WHERE leadcount/salescount >= 2.5;

diff在子句中引用的问题WHERE是它尚不可用。另外,假设您不打算汇总,请参阅 Gordon 的答案以获取另一种选择。但是,使用HAVING只是 MySQL 或 MariaDB 上的一个选项。

于 2019-02-18T02:27:47.033 回答
1

在 MySQL 和 MariaDB 中,您只需HAVING在查询末尾添加一个子句:

HAVING diff >= 2.5

这就像 aWHERE但可以使用别名。

于 2019-02-18T02:25:33.767 回答