我有一张桌子T,有两个A& B.
然后我有一大堆名为ARRAY的数据。 ARRAY包含可能出现在A中的数据列表。
我想要以下内容:
1。按B DESC顺序选择前10行,这样row.A在ARRAY中;记录结果为R;
2。从R中取行,使得row.B>三分之二* max_of_B_in_all_rows
我可以在一份声明中这样做吗?谢谢!
答案 0 :(得分:0)
这是一个使用user-defined variable存储B的最大值的选项:
SELECT A, B
FROM (
SELECT A, B, @maxB:=IF(@maxB>B,@maxB,B) MaxB
FROM TableT
JOIN (SELECT @maxB:=0) T2
WHERE A IN (YourList)
ORDER BY B DESC
LIMIT 10
) T
WHERE B >= (2/3)*MaxB
答案 1 :(得分:0)
这是一个只有一个连接的查询中最简单的解决方案:
SELECT *, MAX(B) AS MAXB
FROM T
INNER JOIN ARRAY
USING(A)
ORDER BY B DESC
HAVING B > MAXB * 2 / 3