有一张表,其中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 |
-----------------------------------
答案 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方法,这是非常不愉快的。