如何在Oracle SQL中列出每个类别中最昂贵和最便宜的商品?

时间:2019-11-18 17:19:58

标签: sql oracle

因此,我需要获取类别列表,然后从每个类别中获取最昂贵的商品,然后获取最便宜的商品。然后,我需要按照ASC顺序中的最小价格和最大价格的总和对这些类别进行排序。我已经尝试过了:

SELECT k.name AS Category, p.name AS MostExpensive, p.name AS Cheapest, Max(price),Min(price)
FROM category k, item p
WHERE  p.category_id=k.category_id 
GROUP BY k.name,p.name
ORDER BY Min(price)+Max(price) ASC;

现在这部分起作用。它确实给了我订购的类别列表,它给了我最便宜和最昂贵的商品的价格。但是问题是它不能连续执行。例如,我在前两行中得到了该信息:

无论如何,我需要此表看起来与众不同,我需要一行包含CD类别,然后在CD旁边的一列中将CD-RW列为最昂贵的商品,然后在另一列旁边最便宜的商品是CD-R。基本上,这是同一件事,但仅在1行中。

如果有人可以帮助我,我真的很感激

2 个答案:

答案 0 :(得分:1)

尝试使用keep子句,如下所示:

SELECT k.name as cat_name,
       max(p.name) keep (dense_rank last order by price) as expensive_item,
       max(price) as max_price,
       max(p.name) keep (dense_rank first order by price) as cheapest_item, 
       min(price) as min_price
FROM category k join item p
On (p.category_id=k.category_id)
GROUP BY k.name
ORDER BY Min(price)+Max(price);

干杯!

答案 1 :(得分:0)

您应按类别将最低和最高价格的sunquery组加入类别,其中表项一个用于最高价格,一个用于最低价格

import moment from 'moment';

Vue.filter('formatDate', value => {
  moment(value, 'YYYY-MM-DD').format('DD/MM/YYYY')
});

并且您不应该使用基于select p1.name AS MostExpensive, p2.name, t1.max_price, t1.min_price FROM ( SELECT k.name AS Category, Max(price) max_price, Min(price) min_price FROM category k INNER JOIN item p ON p.category_id=k.category_id GROUP BY k.name ) t1 INNER JOIN Item p1 ON p1.price = t1.max_price INNER JOIN Item p2 ON p2.price = t1.min_price 的(旧)隐式联接语法;您应该基于WHERE子句使用显式联接语法。

相关问题