首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL select不等于子查询中的限制

问MySQL select不等于子查询中的限制
EN

Stack Overflow用户
提问于 2016-08-05 11:24:34
回答 2查看 525关注 0票数 2

MySQL #1235 -此版本的MySQL尚不支持'LIMIT &IN/ALL/ANY/SOUN子查询‘

给定1个表,如下所示

代码语言:javascript
复制
Item | Name       | Price
----- ------------ --------
1    | Adidas     | 310.00
2    | Nike Run   |  30.00
3    | Puma       | 150.00
4    | Nike Women |  20.00
5    | NB         |  20.00

希望选择记录并返回金额。不要把两个最高价格的记录相加。

代码语言:javascript
复制
SELECT SUM(Price) as total_amount
FROM `test`
WHERE Item NOT IN (
    SELECT Price 
    FROM `test`
    ORDER BY Price DESC
    LIMIT 2)

预期结果:

代码语言:javascript
复制
total_amount
------------
   70.00

如何在子查询中使用JOIN或替代限制?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2016-08-05 11:33:21

以下是使用子查询和limit / offset的一种选择

代码语言:javascript
复制
select sum(price)
from (
  select *
  from test
  order by price desc
  limit 999999999
  offset 2
  ) t

只需确保限制值大于潜在行数(显然是18446744073709551615)……

或者,您可以使用user-defined variables

代码语言:javascript
复制
select sum(price)
from (
  select *, @rn:=@rn + 1 rn
  from test cross join (select @rn:= 0) t
  ) t
where rn > 2

如果您希望排除可能超过2个记录的2个最高价格,这也适用于user defined variables

代码语言:javascript
复制
select sum(price)
from (
  select *, @rn:=if(@prevPrice=price, @rn,
                    if(@prevPrice:=price, @rn + 1, @rn + 1)) rn
  from test cross join (select @rn:= 0, @prevPrice:= null) t
  ) t
where rn > 2

票数 1
EN

Stack Overflow用户

发布于 2016-08-05 11:39:24

您需要一个临时表:

代码语言:javascript
复制
SELECT SUM(Price) FROM test WHERE Item NOT IN (
    SELECT * FROM (
        SELECT Item FROM test ORDER BY Price DESC LIMIT 2
    ) AS tmp
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38780584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档