在列中查找选择顺序

时间:2019-04-10 21:47:56

标签: sql google-bigquery

有一张表,其中user_id用于每个应试者,而选择是所有三个问题的答案。我想获得应试者做出的所有选择的不同顺序,并对顺序进行计数。有没有一种方法可以编写sql查询来实现这一目标?谢谢

----------------------------------
| user_id        | Choice        |      
----------------------------------
|     1          |   a           |
----------------------------------
|     1          |   b           |    
----------------------------------
|     1          |   c           |
----------------------------------
|     2          |   b           |
----------------------------------
|     2          |   c           |
----------------------------------    
|     2          |   a           |
----------------------------------

期望答案:

----------------------------------    
|     choice          |  count   |
----------------------------------
|      a,b,c          |    1     |
----------------------------------
|      b,c,a          |    1      |
-----------------------------------

1 个答案:

答案 0 :(得分:1)

在BigQuery中,您可以使用聚合函数:

select choices, count(*)
from (select string_agg(choice order by ?) as choices, user_id
      from t
      group by user_id
     ) t
group by choices;

?用于指定表顺序的列。请记住:表表示无序集,因此,如果没有这样的列,则选择可以按任何顺序进行。

您可以使用string_agg()在SQL Server 2017+中执行类似的操作。在早期版本中,您必须使用XML方法,这是非常不愉快的。