我有一个名为“user”的表,其中包含详细信息或用户id和产品项代码。
前任:
Select * from Users limit 5;
+----+---------+---------------------------+
| id | user_id | product_item_code |
+----+---------+---------------------------+
| 1 | 123 | {556,772,945} |
| 2 | 124 | {556,965,945,990} |
| 3 | 125 | {772, 435, 990, 556} |
| 4 | 126 | {556, 623, 842} |
| 5 | 127 | {842, 990, 556, 623, 745} |
+----+---------+---------------------------+
我要数一数这些商品的代码是556990623。重复了多少次。
我正在寻找一个查询,给我一个如下输出
+-------------------+-------+
| product_item_code | count |
+-------------------+-------+
| 556 | 5 |
| 990 | 3 |
| 623 | 2 |
+-------------------+-------+
我尝试了下面的代码,但无法获得预期的输出。
select count(1) from Users where ARRAY[556, 990, 623] @> ANY(product_item_code);
请让我知道如何才能得到上述输出。提前谢谢
3条答案
按热度按时间58wvjzkj1#
你可以用
unnest
数组值,然后对其进行计数,如:8oomwypt2#
不用担心。假设给定项在给定数组中从不出现两次,则可以枚举派生表中的值,join with
any()
,和聚合:2skhul333#
使用
unnest
将数组转换为行,然后group by product_item_code
要获得您的计数: