SELECT COUNT(*)表示唯一的ID对

时间:2013-10-16 07:57:40

标签: mysql

我有一个如下表格,名为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 。目标是查看不同用户之间开始的总匹配数。

所以如果我们有:

{{1}}

查询结果应为2。

事实上,我们只有2个匹配由几个不同的用户启动。匹配1 - 3 - 4是相同的匹配,因为由相同的用户ID播放。

任何人都可以帮我吗?

我已经完成了类似的查询但从未在的ID上进行过,总是在一个ID上。

2 个答案:

答案 0 :(得分:3)

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

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

就足够了。

答案 1 :(得分: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