Сконцентрируйте две строки в mysql, но сохраните имена столбцов - PullRequest
2 голосов
/ 30 марта 2020

Mysql (v. 5.1) дБ домена и количество акций Facebook.

tblFacebook

+------------+--------+----------+
| day        | shares | domainid |
+------------+--------+----------+
| 1571011200 |    441 |        1 |
| 1571097600 |    443 |        1 |
| 1571184000 |    474 |        1 |
| 1571270400 |    518 |        1 |
| 1571184000 |    849 |        3 |
| 1571270400 |    849 |        3 |
+------------+--------+----------+

Я хотел бы увидеть следующий вывод:

+------------+------------------+------------------+
| day        | domainid1-shares | domainid3-shares |
+------------+------------------+------------------+
| 1571011200 |    441          |                  |
| 1571097600 |    443          |                  |
| 1571184000 |    474          |  849             |
| 1571270400 |    518          |  849             |
+------------+-----------------+------------------+

Как?

Я пробовал это, но он не дал мне два отдельных столбца (domainid1-shares и domainid3-shares)?

SELECT day, GROUP_CONCAT(shares SEPARATOR ', ') FROM tblFacebook GROUP BY day;

1 Ответ

1 голос
/ 30 марта 2020

Вы можете сделать сводку с условным агрегированием:

select 
    day,
    max(case when domainid = 1 then shares end) domainid1_shares,
    max(case when domainid = 3 then shares end) domainid3_shares
from mytable t
group by day

Демонстрация на DB Fiddle :

       day | domainid1_shares | domainid3_shares
---------: | ---------------: | ---------------:
1571011200 |              441 |             <em>null</em>
1571097600 |              443 |             <em>null</em>
1571184000 |              474 |              849
1571270400 |              518 |              849
...