SQL:假设只有两个列,如何比较不同行中的数据并仅选择唯一的 "pairs"?

标签 sql select group-by selection

我有几个表( 粗体 表示主键):

Dancer(dancer_name, gender, age)

Dance(dancer_name, dvd_id, song_title)

Dvd(dvd_id, song_title, cost)

Song(dancer_name, song_title, genre)

Launch(dancer_name, dvd_id, year)


我想选择歌曲一起出现在一张或多张 DVD 中的舞者对,并且每对舞者只打印一次。
这是我所能得到的最接近的结果,它两次打印出相同的对,但它们的名称在不同的列中:
select distinct DANCER1.dancer_name, DANCER2.dancer_name, count(*) as count
  from Dancer DANCER1, Dancer DANCER2, Dance DANCE1, Dance DANCE2
 where DANCER1.dancer_name = DANCE1.dancer_name 
   and DANCER2.dancer_name = DANCE2.dancer_name 
   and DANCER1.dancer_name <> DANCER2.dancer_name
   and DANCE1.dvd_id = DANCE2.dvd_id
 group by DANCER1.dancer_name, DANCER2.dancer_name;
所以,而不是得到
Tom Jon
Jon Tom
Bob Sam
Sam Bob
我只想
Tom Jon
Bob Sam

最佳答案

如果您将测试从 DANCER1.dancer_name <> DANCER2.dancer_name 更改为至 DANCER1.dancer_name < DANCER2.dancer_name ,你应该得到你想要的结果。

但是,由于您在 Dance 表中使用名称作为键,因此不需要加入 Dancer 表,查询可能会简化为:

SELECT DANCE1.dancer_name, DANCE2.dancer_name, count(*) as count
FROM Dance DANCE1
INNER JOIN Dance DANCE2
ON DANCE1.dvd_id = DANCE2.dvd_id
WHERE DANCE1.dancer_name < DANCE2.dancer_name
GROUP by DANCE1.dancer_name, DANCE2.dancer_name

关于SQL:假设只有两个列,如何比较不同行中的数据并仅选择唯一的 "pairs"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14870268/

相关文章:

mysql - 使用另一个 GROUP BY 过滤 GROUP BY 结果以进行缩减

MySQL分组查询优化

mysql - 成对索引和单列索引的区别?

php - SQL 语句 - SELECT * with MAX()

mysql在表b中插入数据时在表a中插入数据

mysql - 即使计数为 0,如何获取行?只有一张 table

SQL INFORMATION_SCHEMA.COLUMNS 返回不完整的值

mysql - 如果字段具有相同的值并添加新的计数器字段,如何实现对输出进行分组的 SQL 查询?

select - 如何在 golang 的 select default case 中阻塞?

sql - 对于大量数据的简单分组查询,哪种数据库最有效?