-1

我正在处理一个查询,该查询需要在列中输出用户的“总参与度”,例如 1 -eng 列将显示有一次参与的用户,第二列 2-eng 将显示已经完成 2 次参与的用户。同样 3eng 等等。注意显示应该是这样的。我有一个包含用户 ID 的参与表。所以我得到了这样的不同用户

select count(distinct userID) from engagements 

我得到了订婚

select count(*) from engagements 

这里的参与度是指喜欢、回复或分享内容的用户

请帮忙。谢谢!我用过 CASE 和 IF 但无法以下面的形式显示

1eng             2eng          3eng 

100              200           100
4

1 回答 1

0

考虑以行的形式返回结果,然后在您的应用程序中旋转它们。

要在行中返回所需的结果,您可以使用以下查询:

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)SUMOR NULL

于 2013-10-11T07:55:38.697 回答