考虑以行的形式返回结果,然后在您的应用程序中旋转它们。
要在行中返回所需的结果,您可以使用以下查询:
SELECT
engagementCount,
COUNT(*) AS userCount
FROM (
SELECT
userID,
COUNT(*) AS engagementCount
FROM engagements
GROUP BY userID
) AS s
GROUP BY engagementCount
;
基本上,您首先将engagements
行分组userID
并获取每行计数userID
。之后,您使用计数作为分组标准并计算使用该计数找到了多少用户。
如果您坚持在 SQL 中返回列视图,则由于最终结果集中的列数不确定,您将需要求助于动态 SQL。您可能需要临时存储内部 SELECT 的结果,扫描它以构建每个engagementCount
值的计数表达式列表,并最终构建这种查询:
SELECT
COUNT(engagementCount = 1 OR NULL) AS `1eng`,
COUNT(engagementCount = 2 OR NULL) AS `2eng`,
COUNT(engagementCount = 3 OR NULL) AS `3eng`,
...
FROM temporary_storage
;
或者取而代之。(对我来说,后者更明确地表达了意图,因此我首先建议它,但是,如果你碰巧更喜欢这种技术,那么两者之间的性能应该没有明显的差异。这里解释了这个技巧。 )SUM(engagementCount = value)
COUNT(engagementCount = value OR NULL)
SUM
OR NULL