根据两列选择行,并根据第三列对其进行排序

时间:2018-01-06 22:21:28

标签: mysql sql database

我正在为Minecraft游戏开发一个游戏商店,其中一个商品被定义为一对Material字符串和一个Data整数。每个广告项目都插入一个MySQL数据库的表格中,其中包含与之关联的价格整数,同一个项目可以用相同的价格进行多次广告,如下例所示,其中的项目(ink_sack,3)和(苹果,0)出现两次:

+----------+------+-------+
| material | data | price |
+----------+------+-------+
| ink_sack |    0 |     1 |
| ink_sack |    3 |     2 |
| ink_sack |    3 |     6 | 
|    apple |    0 |     2 |
|    apple |    0 |     5 |
|iron_sword|    0 |    10 |

我想要的是检索具有最低价格的每个可能项目(材料和数据对)的条目,如下例所示:

+----------+------+-------+
| material | data | price |
+----------+------+-------+
| ink_sack |    0 |     1 |
| ink_sack |    3 |     2 |
|    apple |    0 |     2 |
|iron_sword|    0 |    10 |

但是,在使用LEAST关键字时,考虑到这些值而不是单个列,我不知道如何做到这一点,或者即使在这种情况下这是正确的选项。我应该如何使用单个查询而不进行后期处理?

2 个答案:

答案 0 :(得分:2)

按您想要唯一的列对记录进行分组。像min()这样的聚合函数适用于每个组

select material, data, min(price) as min_price
from your_table
group by material, data

答案 1 :(得分:0)

试试这个查询! 我在这里使用' GROUP BY'根据数据和组织制作组的条款表格中的材料,然后应用最小' min'的聚合函数。在组数据的价格栏上使用' ORDER BY'按价格对其进行排序条款。 另外,我附上了查询结果的屏幕截图。

SELECT 
      material  ,
      data      ,
      min(price) AS price
FROM 
      [Table Name]
GROUP BY
      data      , 
      material
ORDER BY 
      price

Output of Query