如何使用记录构建查询,使得2列是唯一的? 这是我尝试过的代码:
Select x.a, y.b
from table1 x, table2 y
where x.id = y.id;
1 - a
2 - b
3 - a
4 - b
5 - c
1 - c
6 - a
2 - a
should return this:
1 - a
2 - b
5 - c
但是有数据丢失,没关系,我只想要两个独特的列。 我曾尝试使用 group by ,但这并没有获得两者的唯一性。 为了使其更具描述性背后的意图: table1存储分类,table2存储值。一个分类可以具有多个值,并且一个值可以属于任何数量的分类。现在我想从table1中选择所有(或某些)分类并对应于每个选择一个值,条件是如果使用任何其他分类挑选值,则不应重复这些值。在我的例子中,1,2,3..6是分类,a,b,c是值。现在我想选择分类和相应的值,我选择了分类1,2,5和相应的值a,b,c,因为所有其他分类将使值重复(例如3将使值重复,因为已经选择了分类1)。
答案 0 :(得分:3)
OP正在寻找具有任意分类(table1)的唯一值(table2)。因此,可以使用的方法是枚举来自table2的每组值中的所有分类和值对,然后仅从每个组中选择第一个值。
const getRectQuadrant = (m, n, quad) => {
const quadrantPlaceholders = Array.from({length: n/2 * m/2});
const offsetForRightHalf = (quad % 2) * n / 2;
const offsetForBottomHalf = (quad > 1) * n * m / 2;
const idsForQuadrant = quadrantPlaceholders.map((_,i) => {
const idForTopLeft = 2 * i - i % (n / 2);
return idForTopLeft + offsetForRightHalf + offsetForBottomHalf;
});
return idsForQuadrant;
};
console.log(JSON.stringify(getRectQuadrant(4, 6, 0)));
console.log(JSON.stringify(getRectQuadrant(4, 6, 1)));
console.log(JSON.stringify(getRectQuadrant(4, 6, 2)));
console.log(JSON.stringify(getRectQuadrant(4, 6, 3)));
答案 1 :(得分:1)
如果您的数据与上面发布的数据一致,则它已经是唯一的。
1 - a
2 - b
3 - a
4 - b
5 - c
1 - c
6 - a
2 - a
[1,a],[3,a],[6,a],[2,a]都是单独的唯一值。
如果要匹配数据,可以在数字部分使用min或max等聚合函数。你想要的输出不是最小值或最大值,所以不能确定你想要达到的目的。
答案 2 :(得分:1)
听起来像是两级小组吗?
select count(*), x.a, y.b
from table1 x
inner join table2 y on x.id = y.id
group by x.a, y.b;