带有ORDER BY的SQL查询

时间:2011-01-08 12:53:17

标签: sql

我的SQL数据库中有一个表格如下:

id    type      radius
-------------------------
1     type1     0.25
2     type2     0.59
3     type1     0.26
4     type1     0.78
5     type3     0.12
6     type2     0.45
7     type3     0.22
8     type3     0.98

我无法弄清楚如何定义SELECT查询,该查询返回每种类型的最小半径。

换句话说,我正在寻找的结果将是:

结果:

id    type      radius
-------------------------
1     type1     0.25
6     type2     0.45
7     type3     0.22

我假设我使用ORDER BY来命令半径从最低到最高并抓住最低。但是,我还假设我需要在类型上使用DISTINCT,但我无法弄清楚如何将其关闭。

任何专家SQL的人都知道这种SELECT查询是否可行?非常感谢任何帮助!

非常感谢, 布雷特

5 个答案:

答案 0 :(得分:6)

您希望按类型分组,然后从该类型获取最小半径,并按类型

对其进行排序
SELECT type, MIN(radius) FROM table
GROUP BY type
ORDER BY type

如果您希望id与min一起使用,则不能像我第一次输入那样执行:该id是类型的半随机ID。可悲的是,你必须得到满足(从我的头脑中)

SELECT t1.id,t1.type,t1.radius FROM table t1 
WHERE radius = ( 
     SELECT MIN(radius) FROM table
     WHERE radius = t1.radius
   )

(最终编辑:您必须测试最后一个,基本警告是在第一个查询中您无法可靠地获取Id,因为它不会特别属于具有最小半径的类型)

答案 1 :(得分:2)

尝试使用

SELECT min(radius) FROM table GROUP BY type

min将返回最小值,因为distinct将返回不同的值,但group by允许您对不同的字段执行查询。

结帐http://www.w3schools.com/sql/sql_groupby.asp (还有http://www.w3schools.com/sql/sql_quickref.asp

答案 2 :(得分:0)

你必须将min和GROUP BY结合起来

答案 3 :(得分:0)

我相信这应该有效:

SELECT t1.id,t1.type,t1.radius FROM table GROUP BY type ORDER BY radius

由于默认情况下按顺序递增最小值应为显示的值。

答案 4 :(得分:0)

我正在尝试在Android Room中设置用户选择的SQL查询。

    @Query("SELECT * FROM wrestler_table ORDER BY :columnName :sortOrder LIMIT :size")
    LiveData<List<WrestlersEntity>> getAllWrestlers(String columnName, String sortOrder, int size);

Android stuido将查询中的sortOrder列为错误。

ASC, BETWEEN, COLLATE, DESC, IN, LIMIT, comma or semicolon expected, got ':sortOrder'

我希望sortOrder是一个变量,以便用户可以更改数据返回的顺序。对我在这里做错的任何想法吗?