1

我有一个表 T,它有两个列 A 和 B。

然后我有一大组数据,称为 ARRAY。ARRAY 包含可能出现在 A 中的数据列表。
我想要以下内容:
1. 按 B DESC 顺序选择前 10 行,这样 row.A 在 ARRAY 中;将结果记录为 R;
2. 从 R 中取行,使得 row.B > 2/3*max_of_B_in_all_rows


我可以在一份声明中这样做吗?谢谢!

4

2 回答 2

0

这是一个查询中最简单的解决方案,只有一个连接:

SELECT *, MAX(B) AS MAXB
FROM T
INNER JOIN ARRAY
USING(A)
ORDER BY B DESC
HAVING B > MAXB * 2 / 3
于 2013-03-30T02:54:14.950 回答
0

这是一个使用用户定义的变量来存储 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

SQL 小提琴演示

于 2013-03-30T01:18:44.573 回答