如何编写这个复杂的mysql查询?

时间:2013-03-30 01:04:04

标签: sql select

我有一张桌子T,有两个A& B.

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


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

2 个答案:

答案 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

SQL Fiddle Demo

答案 1 :(得分:0)

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

SELECT *, MAX(B) AS MAXB
FROM T
INNER JOIN ARRAY
USING(A)
ORDER BY B DESC
HAVING B > MAXB * 2 / 3