【发布时间】:2013-01-02 02:23:07
【问题描述】:
我有一个 SQL 挑战,需要一些帮助。
下面是一个简化的示例,在我的真实案例中,我在慢速 VIEW 中有大约 500k 行。因此,如果您也有有效的解决方案,我将不胜感激。我想我必须以某种方式使用 GROUP BY,但我不确定。
假设我有一张这样的桌子
╔═════════╦══════════╦══════════╦═══════╗
║ ORDERID ║ NAME ║ TYPE ║ PRICE ║
╠═════════╬══════════╬══════════╬═══════╣
║ 1 ║ Broccoli ║ Food ║ 1 ║
║ 1 ║ Beer ║ Beverage ║ 5 ║
║ 1 ║ Coke ║ Beverage ║ 2 ║
║ 2 ║ Beef ║ Food ║ 2.5 ║
║ 2 ║ Juice ║ Beverage ║ 1.5 ║
║ 3 ║ Beer ║ Beverage ║ 5 ║
║ 4 ║ Tomato ║ Food ║ 1 ║
║ 4 ║ Apple ║ Food ║ 1 ║
║ 4 ║ Broccoli ║ Food ║ 1 ║
╚═════════╩══════════╩══════════╩═══════╝
所以我想做的是:
在每个订单中,如果有餐饮订单行,我想要最高的饮料价格
所以在这个例子中我想要一个这样的结果集:
╔═════════╦═══════╦═══════╗
║ ORDERID ║ NAME ║ PRICE ║
╠═════════╬═══════╬═══════╣
║ 1 ║ Beer ║ 5 ║
║ 2 ║ Juice ║ 1.5 ║
╚═════════╩═══════╩═══════╝
我怎样才能以有效的方式实现这一目标?
【问题讨论】:
-
。 .因为你说view很贵,我觉得你应该选择Bogdan的方案。我以前从未发表过这样的评论,但您确实强调了视图的缓慢性,并且该解决方案是唯一只扫描一次视图的解决方案。
-
是的,这也是一个很好或更好的答案。在我通过 Bogdan 之前,我已经选择并实施了这个。然而,我的最终标准是解决这个问题,所以我选择了第一个也是最好的答案。但我确实理解你的意见。
标签: sql sql-server group-by