由于某些非常具体的情况,我发现自己必须编写这样的查询(示例简化):
SELECT username, avg(points) as average_points,
CASE
WHEN average_points >= 100
THEN TRUE
ELSE FALSE
END as is_winner
FROM user_points
GROUP BY username;
当然我不能这样做,因为average_points不是一列。有没有办法在单个查询中执行实际实现此操作的内容?
我考虑过使用子查询,但我必须分别计算每个用户的点数和布尔值。
答案 0 :(得分:1)
重复一下这个表达方式。也不需要CASE
:
SELECT username,
avg(points) as average_points,
avg(points) >= 100 as is_winner
FROM user_points
GROUP BY username;
如果您担心表现,avg(points)
只会被评估一次。
另一种选择是将其放入派生表中:
SELECT username,
average_points,
average_points >= 100 as is_winner
FROM (
select username, avg(points) as average_points
from user_points
group by username
) pt;
答案 1 :(得分:0)
试试这个
SELECT username, avg(points) as average_points,
CASE
WHEN avg(points) >= 100
THEN TRUE
ELSE FALSE
END as is_winner
FROM user_points
GROUP BY username;
答案 2 :(得分:0)
您只需将代码更改为
SELECT
username
,average_points
,CASE
WHEN average_points >= 100
THEN TRUE
ELSE FALSE
END AS is_winner
FROM(
SELECT
username
, AVG(points) AS average_points
FROM user_points
GROUP BY username
);