我有一个包含两列A和B的表。 对于A中的每个元素,对应于B中的一个或多个元素。 我想重新排序表格,以便在A中包含与B中大多数元素相关联的A中的元素。
示例:
Home Red
Home Pink
Home White
Car Blue
Car Yellow
Bike Blue
我想输出:
Car Blue
Car Blue
Home Red
Home Pink
Home Pink
Car Yellow
Home White
Bike Blue
我需要通过这种方式调用以重新排序表的SQL查询是什么? (这是teradata,如果有所作为)。 我需要将它添加到A中的每个元素,可能会有一个或多个行具有相同的元素B,我想要不同的计数。
示例:
DEBUG = False
...
STATIC_ROOT = '/home/huhu/webapps/eng30_static_media/static'
MEDIA_ROOT = '/home/huhu/webapps/eng30_static_media/media'
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
应该返回与上面相同的内容。
答案 0 :(得分:1)
以下是使用COUNT() OVER()
窗口聚合函数
select * from yourtable
Order by COUNT(1) OVER(PARTITION BY A) DESC
答案 1 :(得分:0)
你似乎想要:
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);
答案 2 :(得分:0)
您只需在计数前删除重复项。由于GROUP BY all columns
与DISTINCT
相同,您可以使用此代码:
SELECT colA, colB
FROM tab
GROUP BY 1,2
ORDER BY Count(*) Over (PARTITION BY colA) DESC
答案 3 :(得分:0)
以下是我的观点:
SELECT
col1,
col2
FROM (
SELECT
col1,
col2,
1 AS rn
FROM
<your table>) t
GROUP BY 1,2
ORDER BY 1,SUM(rn) DESC
这让我们得到一个&#34;计数&#34;每个col1 / col2交集的行数。结果是:
Bike Blue
Car Blue
Car Yellow
Home Pink
Home Red
Home White