【发布时间】:2015-02-04 15:03:03
【问题描述】:
我有这个问题:
SELECT campaign.id AS campaign_id,
GROUP_CONCAT(utm.campaign) AS utm_campaign
FROM [email_event]
WHERE (TIMESTAMP BETWEEN SEC_TO_TIMESTAMP(1412136000) AND SEC_TO_TIMESTAMP(1414814340))
GROUP BY campaign_id;
我很想运行一个不同的 GROUP_CONCAT,因为现在输出中会重复相同的条目。
更新
我已将您的解决方案扩展到此:
SELECT campaign.id AS campaign_id,
GROUP_CONCAT(utm.campaign) AS utm_campaign,
GROUP_CONCAT(utm.content) AS utm_content
FROM
(SELECT *
FROM
(SELECT 507 AS campaign.id,
'remarketingemail' AS utm.campaign,
'newsletter_feb' AS utm.content),
(SELECT 508 AS campaign.id,
'remarketingemail' AS utm.campaign,
'newsletter_jan' AS utm.content),
(SELECT 508 AS campaign.id,
'remarketingemail' AS utm.campaign,
'newsletter_feb' AS utm.content),
(SELECT 508 AS campaign.id,
'adwordscamp' AS utm.campaign,
'cyber_monday' AS utm.content) )
GROUP BY campaign_id;
但现在我得到了 utm_campaign 的重复值。
+-----+------------------------------------------+--------------------------------------+
| 507 | remarketingemail | newsletter_feb |
| 508 | remarketingemail,remarketingemail,adw... | newsletter_jan,newsletter_feb,cyb... |
+-----+------------------------------------------+--------------------------------------+
这是子查询的原始输出,在 qroup by 之前
+-----+-----------------------------------+-------------------------------+
| 507 | remarketingemail | newsletter_feb |
| 508 | remarketingemail | newsletter_jan |
| 508 | remarketingemail | newsletter_feb |
| 508 | adwordscamp | cyber_monday |
+-----+-----------------------------------+-------------------------------+
【问题讨论】:
-
能否也分享一下子查询的结果?
-
@N.N.子查询的结果是您可以从我上面的表中扣除的 3 行。问题是“remarketingemail”在 group_concat 中被复制,并且不知道如何获得唯一性。
-
可以分享源数据吗?从你的问题很难理解每个字段的基数。
-
@N.N.更新了问题
-
如果 utm.campaign 与campaign_id 有1:1 或m:1 的关系,您可以使用不同的聚合函数,例如MAX()。
标签: google-bigquery