gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:25:54 25 4
gpt4 key购买 nike

我有一个表,其中有一列显示成对的学生,例如“Anna-Bob”、“Anna-Charlie”、“Bob-Dan”、“Bob-Anna”、“Charlie-Anna”...

我想计算每对学生以任意顺序出现在该列中的次数。例如,对于“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

最佳答案

您应该认真考虑标准化您的数据模型并将两个名称存储在单独的列中。话虽这么说,您可以使用 SUBSTRING_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);

关于mysql - 如何计算一组单词以任意顺序出现在列中的次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com