Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个表 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
我可以在一份声明中这样做吗?谢谢!
这是一个查询中最简单的解决方案,只有一个连接:
SELECT *, MAX(B) AS MAXB FROM T INNER JOIN ARRAY USING(A) ORDER BY B DESC HAVING B > MAXB * 2 / 3
这是一个使用用户定义的变量来存储 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 小提琴演示