首页 > 解决方案 > 汇总不同组的每个 ID 的结果

问题描述

我希望ID为每个domain.

我们的想法是获取T/F三种actions类型(在一列中)的布尔值 ( ),并将它们放在一行中ID

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

现在,我可以使用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 |
+----+-------+-------+----------+------------+

标签: mysqlsqlgroup-by

解决方案


使用条件聚合:

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.')。

DB Fiddle上的这个演示与您的示例数据返回:

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

推荐阅读