我正在 MySQL 中编写一个存储过程来获取一组管理信息。问题是:我需要“水平”而不是“垂直”的结果。为了详细说明,这是我要处理的数据库设计:
users
- company_id
- user_type_id
companies
- company_id
user_types
- user_type_id
- 描述符
所以这是交易:我需要计算按描述符分组的所有用户,然后按公司分组。我可以这样:
SELECT
COUNT(*) AS number,
ut.descriptor,
company_id
FROM
users u
INNER JOIN
user_types ut
ON ut.user_type_id = u.user_type_id
AND descriptor LIKE 'xyz%'
INNER JOIN
companies c
ON u.company_id = c.company_id
GROUP BY
ut.descriptor,
company_id
然而,这确实给了我正确的结果:这个列表是“垂直的”。我为每个描述符得到一个新行。我实际上希望描述符成为列。行应按公司分组。这就是应用程序逻辑所期望的。
我想先获取描述符,然后再进行计算,但这给我留下了完全相同的问题。我可以为每个描述符执行一个子查询,但这会非常非常难看。
总而言之,预期的结果是这样的,后面的 3 列实际上是 user_types 表中的描述符:
company
- admin
- customer
-supplier
1 - 4 - 1 - 5
1 - 7 - 4 - 2
这将转化为:公司 1 有 4 名管理员、1 名客户、5 名供应商。公司 2 有 7 名管理员、4 名客户、2 名供应商。
我真的觉得我在这里遗漏了一些东西。我忽略了什么?