Mysql 如何计算一组单词以任何顺序出现在一列中的次数?
我有一张桌子,上面有一列显示成对的学生,比如“安娜鲍勃”、“安娜查理”、“鲍勃丹”、“鲍勃安娜”、“查理安娜” 我想数一数每对学生以任何顺序出现在该列中的次数。例如,对于“Anna Bob”对,我将计算具有“Anna Bob”或“Bob Anna”的对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
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);
嗨,蒂姆。非常感谢你的回答。我真的很感谢你的帮助。如果两个名字分别存储在不同的列中,您能告诉我您的答案吗?我试着想办法,但还是没办法。非常感谢。