在此先感谢您的时间,我需要实现的是从单个查询生成多个列,事情是这样的:
我有一张桌子正在储存下一张:
id | user_id | revision
1 1 Approved
2 1 Rejected
3 1 Pending
4 1 Pending
5 1 Pending
我需要的是得到下一个结果:
Total | User | Pending | Rejected | Approved
5 1 3 1 1
我尝试过像这样使用Group:
SELECT count(id) Total, user_id User, revision FROM table1 GROUP BY user_id, revision
但是输出结果远远不是我想要得到的:
Total | User | revision
3 1 Pending
1 1 Rejected
1 1 Approved
我的想法是获得正确的对象返回,以避免服务器端代码过度循环不必要的进程,所以如果数据库可以在一次调用中进行处理,这将是很好的.
我试着谷歌搜索了几个小时,所有我能得到的是“多列单列”的结果很多,这是我不需要的,感谢你的帮助.
许多用户的最终结果集应如下所示:
Total | User | Pending | Rejected | Approved
5 1 3 1 1
5 2 4 0 1
5 7 2 3 0
这几乎是我需要的一些编辑之后,我仍然无法用固定的数字而不是百分比发送它,我缺乏工作组案例的知识,如果你们中的任何人都可以帮助它,我将继续努力,非常感谢.
解
嘿我设法做到这一点,这很容易,但我缺乏知识,我读到了MySQL Cookbook中的Genemented Summaries一章,这是他们解释你可以在查询中创建count,sum和其他方法的地方在您定义的那些列中获取正确的值,因此这是我最终使用的查询:
SELECT user_id as userid, count(id) Total,
COUNT(IF(revision = 'pending', 1, NULL)) as pending,
COUNT(IF(revision = 'approved', 1, NULL)) as approved,
COUNT(IF(revision = 'rejected', 1, NULL)) as rejected
FROM table1
GROUP BY user_id
只有满足条件时,才会按计数填充这些值.
解决方法:
我阅读了MySQL Cookbook中的Genemented Summaries一章,他们解释说你可以在查询中创建count,sum和其他方法,以便在你定义的那些列中获得正确的值,这称为统计查询,然后这就是查询我最终使用:
SELECT user_id as userid, count(id) Total,
COUNT(IF(revision = 'pending', 1, NULL)) as pending,
COUNT(IF(revision = 'approved', 1, NULL)) as approved,
COUNT(IF(revision = 'rejected', 1, NULL)) as rejected
FROM table1
GROUP BY user_id
只有满足条件时,才会按计数填充这些值.
标签:performance,mysql
来源: https://codeday.me/bug/20190806/1602444.html