2016-08-30 54 views
-1

我有产品按价格排序。 如何选择所有成本低于1欧元的产品,否则继续搜索至少选择X种产品。如何选择至少x行

SQL查询必须每次都返回至少X行。

+2

X选择的行* how *? – Lamak

+0

你不能使用按产品成本限制x'的顺序吗?也许样本数据和预期结果会有所帮助。 – sgeddes

+0

你尝试过什么吗?你能提供你正在尝试的查询吗? – Explorer

回答

-1

以下是它在Microsoft SQL Server中的含义。我不熟悉Mysql,但我想象的逻辑保持不变。而不是“TOP”,你将不得不在底部查询中使用LIMIT。

DECLARE @Price as Money 

SET @Price = 1 

IF (SELECT COUNT(1) FROM Product WHERE Price < @Price) > 50 
SELECT 
    ProductName 
FROM 
Product 
WHERE Price < @Price 

ELSE 
SELECT TOP 50 
    ProductName 
FROM Product 
ORDER BY Price 

粗糙MySQL的转换:

DECLARE PriceVar as DECIMAL(13,2) 

SET PriceVar = 1 

IF (SELECT COUNT(1) FROM Product WHERE Price < PriceVar) > 50 
SELECT 
    ProductName 
FROM 
Product 
WHERE Price < PriceVar 

ELSE 
SELECT 
    ProductName 
FROM Product 
ORDER BY Price LIMIT 50 
+0

你不在MySQL中声明'@'变量,并且没有'Money'数据类型。 – Barmar

+0

很高兴知道...我做出了改变。绝对不是一个确切的答案,但我希望这至少能够走上正确的轨道。 – Zi0n1

-1

这里是一个选择的解决方案,希望它可以帮助你。

SELECT * FROM (
    (
     SELECT 
      productname 
     FROM 
      Product 
     WHERE Price < :Price 
    ) 
    union all 
    ( 
     SELECT 
      productname 
     FROM 
      Product 
     order by price desc limit :X 
    ) 
) x limit :X 

基于执行次数和表的大小可以有服务表现inpact但可以通过缓存顶部产品,第二内部查询,为不同的表来解决。

相关问题