我正在尝试编写一些查询,我希望在最后50个条目中限制它们。
SELECT CAST(sum(CASE WHEN US.flg_tip THEN 1 ELSE 0 END)AS REAL) /
(sum(CASE WHEN US.id_entry > 0 THEN 1 ELSE 0 END) - sum(CASE WHEN A.action = '' THEN 1 ELSE 0 END))
FROM user AS U, user_statistics AS US, actions AS A
WHERE US.id_user = U.id_user AND
AS.id_usertype = 1 AND
A.id_action = US.id_action AND
U.id_store = 5 AND
U.user_name LIKE 'Smith%'
LIMIT 50
然而,LIMIT 50在这种情况下不起作用。
请帮忙。谢谢! 注意(性能很重要,因为它预计可以与大型数据库一起使用)
编辑: 用于计算的SELECT部分中的公式基本上是 (提示数量/(条目数量 - 订单数量)
edit2:如我所解释的那样SELECT选择了一些数学函数,它对Smith工作得很好(但对于史密斯的所有行)
如果我想看看史密斯在过去50次访问中的表现如何,我想我可以使用LIMIT 50来获取史密斯数据库中的最后50个条目并让查询进行数学运算并给出一个数字史密斯表现如何使用LIMIT 50进行最后50次访问。
答案 0 :(得分:1)
如果你想求和最后50个条目,你需要一个子查询:
SELECT CAST(sum(CASE WHEN flg_tip THEN 1 ELSE 0 END)AS REAL) /
(sum(CASE WHEN US.id_entry > 0 THEN 1 ELSE 0 END) -
sum(CASE WHEN A.action = '' THEN 1 ELSE 0 END)
)
FROM (SELECT US.*, A.action
FROM user U JOIN
user_statistics US
ON US.id_user = U.id_user JOIN
actions A
ON A.id_action = US.id_action
WHERE US.id_usertype = 1 AND
U.id_store = 5 AND
U.user_name LIKE 'Smith%'
ORDER BY . . .
LIMIT 50
) u;
注意:
JOIN
语法。ORDER BY
。我不知道哪个列是. . .
。您可以将外部SELECT
简化为:
SELECT (sum( (flg_tip)::numeric ) /
(sum( (US.id_entry > 0)::numeric ) - sum( (A.action = '')::numeric ) )
)