我有2个表:@Override
public void onBackPressed() {
this.finish();
}
和Items
。每个项目属于一个类别。
表项目
Categories
表类别
║ Item_name ║ Category_id ║ Price ║
║ A ║ Cat_1 ║ 100 ║
║ B ║ Cat_1 ║ 50 ║
║ C ║ Cat_2 ║ 98 ║
║ D ║ Cat_2 ║ 99 ║
║ E ║ Cat_1 ║ 40 ║
我想按价格对某个类别中的所有商品进行排序。我怎样才能做到这一点?预期结果:
║ Category_id ║ Category_name ║
║ Cat_1 ║ X ║
║ Cat_2 ║ Y ║
答案 0 :(得分:1)
根据您的预期结果,您甚至不需要类别表。只需按所需顺序从项目表中选择。
SELECT i.Item_Name, i.Category_ID, i.Price
FROM items i
ORDER BY i.Category_ID, i.price;
但是,如果您想要包含类别名称,则可以进行简单的连接。
SELECT i.Item_Name, i.Category_ID, c.Category_Name, i.Price
FROM items i
INNER JOIN categories c
ON i.Category_ID = c.Category_ID
ORDER BY i.Category_ID, i.price;
修改强> 根据评论中的问题,如何返回SQL Server每个类别中最便宜的50个项目。您可以使用公用表表达式(CTE)并利用ROW_NUMBER函数按价格对每个类别中的项目进行编号。
WITH cteOrderByCategory AS (
SELECT i.item_name, i.Category_ID, i.price,
ROW_NUMBER() OVER(PARTITION BY i.Category_ID ORDER BY i.price) AS RowNum
FROM items i
)
SELECT obc.item_name, obc.Category_ID, obc.price
FROM cteOrderByCategory obc
WHERE obc.RowNum <= 50
ORDER BY obc.Category_ID, obc.price;
答案 1 :(得分:1)
无需分组,您只需订购:
select
i.Item_Name,
c.Category_name,
i.Price
from items i
inner join Categories c on i.category_id = c.category_id
order by c.category_id, i.price