我希望针对每个 domainID(在此示例中仅显示一个)总结我的结果。

想法是为三种actions类型(在一列中)获取 bool 值(T/F),并将它们分别放在一行中编号

但是,这些结果需要针对 URL 列中的每个 domain 进行分组。

现在,我可以使用 CASE WHEN 条件来获取 T/F 值,但是,我不会在一行中得到结果...

要获取域,我认为我可以使用 SUBSTRING

初始表:

+----+----------+----------------+ 
| ID | Action   | URL            | 
+----+----------+----------------+ 
| 1  | Click    | www.google.com | 
+----+----------+----------------+ 
| 1  | Hover    | www.google.com | 
+----+----------+----------------+ 
| 1  | Download | www.reddit.com | 
+----+----------+----------------+ 

期望的输出:

+----+-------+-------+----------+------------+ 
| ID | Click | Hover | Download | Domain     | 
+----+-------+-------+----------+------------+ 
| 1  | T     | T     | F        | google.com | 
+----+-------+-------+----------+------------+ 
| 1  | F     | F     | T        | reddit.com | 
+----+-------+-------+----------+------------+ 

请您参考如下方法:

使用条件聚合:

SELECT 
    id, 
    MAX(CASE WHEN action = 'Click' THEN 'T' ELSE 'F' END) click, 
    MAX(CASE WHEN action = 'Hover' THEN 'T' ELSE 'F' END) hover, 
    MAX(CASE WHEN action = 'Download' THEN 'T' ELSE 'F' END) download, 
    SUBSTR(url, 5) domain 
FROM mytable 
GROUP BY id, SUBSTR(url, 5) 

要生成域名,您只需从 url 中删除前 4 个字符(因此假设所有 url 都以 'www.' 开头)。

这个 Demo on DB Fiddle 您的示例数据返回:

| id  | click | hover | download | domain     | 
| --- | ----- | ----- | -------- | ---------- | 
| 1   | T     | T     | F        | google.com | 
| 1   | F     | F     | T        | reddit.com | 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!