用户表
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/