因此,我需要获取类别列表,然后从每个类别中获取最昂贵的商品,然后获取最便宜的商品。然后,我需要按照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行中。
如果有人可以帮助我,我真的很感激
答案 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
子句使用显式联接语法。