所以我有这个问题,我有这个表位置{id,name}。在查询中,如何逐个获得不同排列的数量?
例如,我有三个位置:
组合是
所以返回的值应该是6.我无法理解这个问题。
答案 0 :(得分:3)
这样做:
SELECT COUNT(1) FROM (SELECT t1.name as name1, t2.name as name2
FROM Locations t1, Locations t2
WHERE t1.name <> t2.name)
的示例
答案 1 :(得分:1)
正如其他人所说的那样,如果你只是想要这个数字,这很容易做,因为它只是一个数学问题。
如果您真的想要所有组合,那么您正在寻找笛卡尔积,除非您想要过滤掉相同的对。
见下文 -
with tbl as(
select '01' as id, 'Portugal' as name from dual union all
select '02' as id, 'Spain' as name from dual union all
select '03' as id, 'UK' as name from dual
)
select x.name, y.name
from tbl x, tbl y
where x.name <> y.name
结果:
NAME NAME
Portugal Spain
Portugal UK
Spain Portugal
Spain UK
UK Portugal
UK Spain
答案 2 :(得分:0)
最简单的方法就是应用正确的公式:
select count(*) * (count(*) - 1)
from locations l;
如果您可能有重复项,请使用count(distinct)
:
select count(distinct name) * (count(distinct name) - 1)
from locations l;
n件事的双向组合数为n*(n - 1)
。如果不管订单如何,那么你可以将上面除以2
。