2017-03-01 50 views
0

我有一个问题,我需要使用连接显示一些数据。其中一列必须按照“颜色”以及流行度进行分组(因此最常出现的颜色组将显示为第一组行等等)。在SQL连接中按热门程度排序列?

到目前为止,我已经取得了参加并通过色彩管理,以组吧:

SELECT * FROM tblexample1 
JOIN tblexample2 ON tblexample1.unique_id = tblexample2.unique_id 
ORDER BY colour; 

我只需要获得人气举办的同色列,是有这样做的一个简单的方法?

在此先感谢

+4

帮助我们帮助您 - 共享表格的结构,一些示例数据以及您试图从此示例中获得的结果。 – Mureinik

+0

你是什么意思,“其中一列必须按...分组” - 你认为如何将一列**分组,而其他列不是?如果您甚至无法提出有意义的要求,则无法为您提供帮助。 – mathguy

+2

我敢打赌,他只是想要'ORDER BY color,popular'这样的东西。 – Sam07

回答

1

也许:

ORDER BY COUNT(*) OVER (PARTITION BY colour) DESC, colour 

这会给你的结果,用最流行的色彩第一。如果你有两种颜色相同的流行度,那么你会得到按颜色排序的结果。

+0

这会给你一个语法错误。 ORDER BY中不能使用分析函数。 – mathguy

+0

它适用于我的11g数据库。也许你在考虑WHERE子句。 – DCookie

+0

@mathguy:看看第二段的最后一句:https://docs.oracle.com/cloud/latest/db112/SQLRF/functions004.htm#SQLRF06174 – DCookie

1

如果我没有理解这个问题吧,我会尝试这样的:

SELECT C.colour, T1.F1, T1.F2, T2.F3, T2.F4 
FROM (
    SELECT colour, COUNT(*) as Popularity FROM tblexampl1 
    GROUP BY colour) C 
JOIN tblexampl1 T1 ON C.colour = T1.colour 
JOIN tblexampl2 T2 on T1.unique_id = T2.unique_id 
ORDER BY C.Popularity DESC 

如果甲骨文与您支持可以将子查询的WITH子句是有点更容易阅读。