简体   繁体   English

如何计算 MySQL 中按行分组的多列?

[英]How to count multiple columns grouping by rows in MySQL?

I have two tables, "keywords" and "stats" and want to know per keyword how many results each merchant has.我有两个表,“关键字”和“统计数据”,想知道每个关键字每个商家有多少结果。 So one row per keyword.所以每个关键字一行。

Desired result eg:期望的结果,例如:

KWD    | RESULTS Amazon | RESULTS eBay
test     3                5
second   6                2

The tables:表:

create table keywords
(
    ID           mediumint unsigned auto_increment
        primary key,
    KEYWORD      varchar(255)                                                     null
);

create table stats
(
    MERCHANT_ID tinyint unsigned                   not null,
    TYPE_ID     mediumint unsigned                 not null comment 'the ID of the coresponding type. E.g. kw_id from keywords',
    RESULTS     smallint unsigned                  null,
    DATE        date                               not null,
    primary key (DATE, MERCHANT_ID, TYPE_ID)
)
    comment 'How many results does each merchant have per search?';

Sample data:样本数据:

-- keywords
insert into test.keywords (ID, KEYWORD) values (1, 'testing');
insert into test.keywords (ID, KEYWORD) values (2, 'blablub');

-- stats
insert into test.stats (MERCHANT_ID, TYPE_ID, RESULTS, DATE) values (1, 1, 33, '2021-07-06');
insert into test.stats (MERCHANT_ID, TYPE_ID, RESULTS, DATE) values (1, 2, 3, '2021-07-06');
insert into test.stats (MERCHANT_ID, TYPE_ID, RESULTS, DATE) values (2, 1, 22, '2021-07-06');
insert into test.stats (MERCHANT_ID, TYPE_ID, RESULTS, DATE) values (2, 2, 6, '2021-07-06');

The query:查询:

select
       kwd.KEYWORD,
       mss.MERCHANT_ID,
       mss.RESULTS
from keywords kwd
LEFT JOIN stats mss ON mss.TYPE_ID = kwd.ID
where
    date = 20210705
group by kwd.ID

There are about 10 merchants.大约有10个商人。 Is it possible to get one row per keyword and have the number of results per merchant in seperate colunns?是否可以为每个关键字获取一行并在单独的列中获得每个商家的结果数量?

Try something like this:尝试这样的事情:

select
  kwd.KEYWORD,
  SUM(IF(mss.MERCHANT_ID = 'amazon', mss.RESULTS, 0)) as `amazon_sum`,
  SUM(IF(mss.MERCHANT_ID = 'eBay', mss.RESULTS, 0)) as `eBay_sum`
    
from keywords kwd
    LEFT JOIN stats mss ON mss.TYPE_ID = kwd.ID
    where
        date = 20210705
    group by kwd.ID

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM