Mysql 如何计算一组单词以任何顺序出现在一列中的次数?

Mysql 如何计算一组单词以任何顺序出现在一列中的次数?,mysql,sql,Mysql,Sql,我有一张桌子,上面有一列显示成对的学生,比如“安娜鲍勃”、“安娜查理”、“鲍勃丹”、“鲍勃安娜”、“查理安娜” 我想数一数每对学生以任何顺序出现在该列中的次数。例如,对于“Anna Bob”对,我将计算具有“Anna Bob”或“Bob Anna”的对 Table Id Pair 1 Anna-Bob 2 Anna-Charlie 3 Bob-Dan 4 Bob-Anna 5 Charlie-Anna The expected result should be Pair

我有一张桌子,上面有一列显示成对的学生,比如“安娜鲍勃”、“安娜查理”、“鲍勃丹”、“鲍勃安娜”、“查理安娜”

我想数一数每对学生以任何顺序出现在该列中的次数。例如,对于“Anna Bob”对,我将计算具有“Anna Bob”或“Bob Anna”的对

Table

Id Pair
1  Anna-Bob
2  Anna-Charlie
3  Bob-Dan
4  Bob-Anna
5  Charlie-Anna

The expected result should be

Pair        Count
Anna-Bob      2
Anna-Charlie  2
Bob-Dan       1 

<>你应该认真考虑规范化你的数据模型,并将两个名字中的每一个存储在单独的列中。也就是说,您可以通过使用
子字符串\u INDEX
来解决此问题:

SELECT
    CONCAT(
        LEAST(SUBSTRING_INDEX(Pair, '-', 1), SUBSTRING_INDEX(Pair, '-', -1)),
        '-',
        GREATEST(SUBSTRING_INDEX(Pair, '-', 1), SUBSTRING_INDEX(Pair, '-', -1))) AS Pair,
    COUNT(*) AS cnt
FROM yourTable
GROUP BY
    LEAST(SUBSTRING_INDEX(Pair, '-', 1), SUBSTRING_INDEX(Pair, '-', -1)),
    GREATEST(SUBSTRING_INDEX(Pair, '-', 1), SUBSTRING_INDEX(Pair, '-', -1))
ORDER BY
    cnt DESC;
如果您的桌子如下所示:

Id | Name1   | Name2
1  | Anna    | Bob
2  | Anna    | Charlie
3  | Bob     | Dan
4  | Bob     | Anna
5  | Charlie | Anna
然后查询可以简化一点:

SELECT
    CONCAT(LEAST(Name1, Name2), '-', GREATEST(Name1, Name2)) AS Pair,
    COUNT(*) AS cnt
FROM yourTable
GROUP BY
    LEAST(Name1, Name2),
    GREATEST(Name1, Name2);

嗨,蒂姆。非常感谢你的回答。我真的很感谢你的帮助。如果两个名字分别存储在不同的列中,您能告诉我您的答案吗?我试着想办法,但还是没办法。非常感谢。