我有一个如下表格,名为matches
:
match_id ( AUTO INCREMENT )
user_id ( INT 11 )
opponent_id ( INT 11 )
date ( TIMESTAMP )
我要做的是SELECT
user_id
和opponent_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上。
答案 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