按与大多数其他元素关联的元素重新排序sql查询
我有一个有两列的表,a和B。 A中的每个元素对应B中的一个或多个元素。 我想对表格重新排序,这样我就可以在A中的元素的顶部找到与B中的大多数元素关联的元素 例如:按与大多数其他元素关联的元素重新排序sql查询,sql,teradata,Sql,Teradata,我有一个有两列的表,a和B。 A中的每个元素对应B中的一个或多个元素。 我想对表格重新排序,这样我就可以在A中的元素的顶部找到与B中的大多数元素关联的元素 例如: Car Blue Home Red Home Pink Car Yellow Home White Bike Blue Car Blue Car Blue Home Red Home Pink Home Pink Car Yellow Home
Car Blue
Home Red
Home Pink
Car Yellow
Home White
Bike Blue
Car Blue
Car Blue
Home Red
Home Pink
Home Pink
Car Yellow
Home White
Bike Blue
我想输出:
Home Red
Home Pink
Home White
Car Blue
Car Yellow
Bike Blue
我需要调用什么sql查询来按这种方式对表进行重新排序?(这是在teradata中,以防产生影响)。
我需要将其添加到A中的每个元素中,可能有一行或多行与相同的元素B相关联,我需要不同的计数
例如:
Car Blue
Home Red
Home Pink
Car Yellow
Home White
Bike Blue
Car Blue
Car Blue
Home Red
Home Pink
Home Pink
Car Yellow
Home White
Bike Blue
应该返回与上面相同的值。这里有一个技巧,使用
COUNT()OVER()
select * from yourtable
Order by COUNT(1) OVER(PARTITION BY A) DESC
你似乎想要:
order by count(distinct b) over (partition by a) desc
但是,我认为这在Teradata中不起作用:
select t.*
from (select t.*,
row_number() over (partition by a, b order by a) as seqnum
from t
) t
order by sum(case when seqnum = 1 then 1 else 0 end) over (partition by a);
您只需在计数之前删除重复项。由于按所有列分组
与不同
相同,因此您可以使用:
SELECT colA, colB
FROM tab
GROUP BY 1,2
ORDER BY Count(*) Over (PARTITION BY colA) DESC
以下是我的做法:
SELECT
col1,
col2
FROM (
SELECT
col1,
col2,
1 AS rn
FROM
<your table>) t
GROUP BY 1,2
ORDER BY 1,SUM(rn) DESC
但这只是一种复杂的方法,要从选项卡组中选择col1,col2,按1,2顺序,按1,计数(*)DESC
?