1

我有一个如下表,名为matches

match_id ( AUTO INCREMENT )
user_id ( INT 11 )
opponent_id ( INT 11 )
date ( TIMESTAMP )

我要做的是计算和是唯一对SELECT的行数。目标是查看不同用户之间开始的总匹配数。user_idopponent_id

所以如果我们有:

user_id = 10 and opponent_id = 11
user_id = 20 and opponent_id = 22
user_id = 10 and opponent_id = 11
user_id = 11 and opponent_id = 10

查询的结果应该是 2。

事实上,我们只有 2 场比赛是由几个不同的用户发起的。比赛 1 - 3 - 4 是相同的比赛,因为由相同的两个用户 ID 进行。

谁能帮我这个?

我做过类似的查询,但从来没有对成对的 ID,总是在一个 ID 上。

4

2 回答 2

3

FancyPants 的答案是正确的,但我更喜欢在不使用聚合函数时使用 DISTINCT:

SELECT COUNT(DISTINCT
  LEAST(user_id, opponent_id), 
  GREATEST(user_id, opponent_id)
)
FROM yourtable;

足够了。

于 2013-10-16T08:07:59.923 回答
1
SELECT COUNT(*) AS nr_of_matches FROM (
SELECT 
LEAST(user_id, opponent_id) AS pl1, 
GREATEST(user_id, opponent_id) AS pl2
FROM   yourtable
GROUP BY pl1, pl2
) sq
于 2013-10-16T08:06:58.590 回答