用户表

    id_name     |name
    1           |lubo
    2           |jano
    3           |elena

这里是用户/评分表
id_score    |id_name      |score      |month
1           |1            |0          |1
2           |2            |9          |1
3           |3            |0          |1
4           |1            |2          |2
5           |2            |5          |2
6           |3            |0          |2
7           |1            |0          |3
8           |2            |6          |3
9           |3            |0          |3

我要一份分数为0的月份名单。
列表应该是这样的。
name        |months
lubo        |1,3
jano        |
elena       |1,2,3

我能做这个吗?我有大约1000行。

最佳答案

重要的步骤是:
其中score=0只选择您感兴趣的行。
按组对每个id的名称进行分组。
加入以获取名称。
CONVERT将整数值转换为字符串。
GROUP_CONCAT将结果连接到每个组中。
试试这个:

SELECT
    table1.name,
    GROUP_CONCAT(CONVERT(month, CHAR(8)) ORDER BY month) AS months
FROM table2
JOIN table1 ON table2.id_name = table1.id_name
WHERE score = 0
GROUP BY table2.id_name

请注意,组CONCAT的许多用途都是设计错误。通常最好每个单元格返回一个值。
更新:若要获取所有名称,请使用外部联接:
SELECT
    table1.name,
    GROUP_CONCAT(CONVERT(month, CHAR(8)) ORDER BY month) AS months
FROM table1
LEFT JOIN table2 ON table2.id_name = table1.id_name AND score = 0
GROUP BY table2.id_name

关于mysql - 寻找快速查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4578252/

10-11 01:23