2017-03-08 61 views
-1

看看下面的数据集Demo为例:如何在SQL中使用GROUP BY进行查询时选择第一组中的所有条目?

attr_A attr_B 
0   8 
1   6 
2   6 
2   8 
3   6 

这里是我的问题,我怎么能选择第一组中的所有条目当我申请的SQL语句,如SELECT * FROM Demo GROUP BY attr_B ORDER BY attr_B?查询结果应为:

attr_A attr_B 
1   6 
2   6 
3   6 

P.S.在这里我也标记django-queryset,因为我目前的项目应用django,但我认为如果我知道如何在SQL中做到这一点,它不难在django中实现它。因此,我的问题标题和说明仅包含SQL问题。

+0

如果你在attr_b上组,你将在attr_b结果中有8和6的值。 –

+0

您正在使用哪种RDBMS? –

+0

@GiorgosBetsos MySQL –

回答

2
SELECT * 
FROM Demo 
WHERE attr_B = (SELECT MIN(attr_B) FROM Demo) 

你不需要GROUP BY子句,如果你想选择所有条目

1

这是做在SQL一种方式:

SELECT * 
FROM Demo 
WHERE attr_B = (SELECT MIN(attr_B) FROM Demo) 

如果您的RDBMS支持窗口功能,那么你可以使用RANK

SELECT * 
FROM (
    SELECT *, 
      RANK() OVER (ORDER BY attr_B) AS rnk 
    FROM Demo) AS t 
WHERE t.rnk = 1 
+0

这对我来说很清楚。我想知道是否有没有应用子查询策略。 –

+0

我想你需要删除GROUP BY子句才能工作。否则,你只会得到一个单一的记录;与单一的价值告诉你,attr_B = 6 – Taemyr

+0

@Taemyr是的,你是对的。 OP想要选择同一组内的所有记录。 –