如何获得SQL中有最大值和最小值的行的ID
我正在尝试使查询使我的网站使用效率更高。如何获得SQL中有最大值和最小值的行的ID
由于对SQL有点模糊,我还没有真正学会如何使用嵌套查询,但我设法得到了一些非常接近我想要的东西。
我出售吉他,我有一个大的数据库,所有产品的不同完成选项单独列出。项目在dB中具有唯一的ID,但是按其标题分组,例如,Gibson Les Paul Standard以7次不同的完成选项以dB 7次列出。并非所有的完成选项都必须具有相同的价格,并非所有的完成选项都必须有库存。
在我的网站的搜索结果页面我希望能够表现出:
1)只要一条按产品记录,即1记录吉布森LP标准,然后可以子链接到不同饰面。
2)显示的实际产品必须是或者是是最便宜的完成选项,或者是最便宜的库存。
这是目前工作在我的网站,但它采用N + 1个查询,似乎是可怕运行缓慢,但我的意思的例子,请点击这里:http://www.hartnollguitars.co.uk/search.asp?subcat=Gibson-Les-Pauls(如果血腥的东西工程)
第一部分是好的,我可以在SQL中对标题进行分组,这是问题的第二部分。
使用下面的SQL查询我可以得到最低的价格和最高的价格,我已经统计了有多少变种,我也有最大和最小库存水平。
results.Open "SELECT * FROM
(SELECT *, count(id) as Variants, MAX(price) as highestPrice, MIN(price) as
lowestPrice, MAX(shopstock) as highestStock, MIN(shopstock) as lowestStock FROM
products WHERE item LIKE '%"& replace([searchterm]," ","%") &"%' GROUP BY item)
AS UnknownVar LIMIT 40", conn, 3, &H0001
我需要做的是获取表示最大和最小股票价格值的行的ID值。
我基本上需要能够运行如果/或逻辑,我不知道这是否可能。
所以,我需要能够说
if Item_With_Cheapest_Price is in stock, display this as the thumbnail & link
else
display first item in price sorted list where stock >=1
我还需要一个回落,如果没有完成的有库存,显示最便宜的。
该数据库是MySQL使用ODBC连接,我目前在经典ASP脚本,但目标是升级到.NET,一旦我已经了解如何! :-)
我认为对于ORDER BY部分,你应该使用类似
order by case
when stock > 0 then 0
when stock < 0 then 1
end ascending,
price ascending
我没有检查语法,但是这是想法。您可以按顺序通过Google案例了解更多信息。
至于你要求的休息,我需要的表结构,以更好地了解...
啊,那将有助于简化事情的信息。我明天会看看,现在就跑。使用GROUP_CONCAT可以获得相当不错的结果,这似乎可以在组内生成一系列项目。这很有用,如果按顺序排序可以让我按照正确的顺序获得这些数组,它可以节省排序数组,并且可以准确地给我所需要的数据...尽管如此,现在还是不能回到下周! :-( –
你知道DENSE_RANK的概念?如果没有,我可以向你解释。您的目的可以通过以下查询来解决。看看这个。
SELECT id,
MIN(stock) KEEP (DENSE_RANK FIRST ORDER BY stock,price) "Lowest"
,MAX(stock) KEEP (DENSE_RANK LAST ORDER BY stock,price) "Highest"
FROM products
GROUP BY id;
有一个想法,项目表中有多少条记录? – stivlo
stivlo;总共有几千种产品,但是项目的分组价值(即吉布森莱斯保罗标准)应该有不超过20个完成选项。 –
我一直在怀疑。无关你的问题,但对于缓慢的一个原因是查询的WHERE项目LIKE“%‘&替换([搜索关键词]’,”,‘%’的这一部分 - 因为%符号是在长期指标面前能不会被使用,MySQL将不得不检查**每一行**。看看[全文搜索](http://dev.mysql.com/doc/refman/5.0/en/fulltext-search。 HTML) – stivlo