Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按与大多数其他元素关联的元素重新排序sql查询_Sql_Teradata - Fatal编程技术网

按与大多数其他元素关联的元素重新排序sql查询

按与大多数其他元素关联的元素重新排序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

我有一个有两列的表,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    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