mysql 2个表交叉_具有2个条件的MySQL交叉表聚合

我有一个创建交叉表的查询.结果是branda的txn_id计数,以及brandb的txn​​_id计数.

txn_id不是唯一的.这是交易表的一个例子:

txn_id | nationality_id | sku | sales | units

1 | 1 | 1 | 20 | 2

1 | 1 | 2 | 15 | 1

2 | 4 | 1 | 20 | 2

3 | 2 | 1 | 10 | 1

4 | 3 | 2 | 15 | 1

5 | 4 | 1 | 10 | 1

还有2个表(产品) – (sku,品牌,产品名称)和(国籍) – (nationality_id,国籍).

我想添加第三列,让我获得购买BOTH品牌的txn_id数量

输出应该是

nationality | branda | brandb | combined

1 | 1 | 1 | 1

2 | 1 | 0 | 0

3 | 0 | 1 | 0

4 | 2 | 0 | 0

当前查询.

SELECT

nationalities.nationality,

COUNT((CASE brand WHEN 'branda' THEN txn_id ELSE NULL END)) AS branda,

COUNT((CASE brand WHEN 'brandb' THEN txn_id ELSE NULL END)) AS brandb

FROM

transaction_data

INNER JOIN

products USING (sku)

INNER JOIN

nationalities USING (nationality_id)

GROUP BY nationality

ORDER BY branda DESC

LIMIT 20;

我尝试过使用:

COUNT((CASE品牌WHEN’brandb’OR’brandb’THEN txn_id ELSE NULL END))AS结合 – 但这显然会返回太多(无论是否一起购买,都会返回branda或brandb).我知道我不能使用AND,因为很明显没有一个单元格将成为branda和brandb.

我也试过用:

COUNT((CASE品牌WHEN IN(‘branda’,’brandb’)THEN txn_id ELSE NULL END))AS组合 – 但这不是有效的语法.

我觉得我应该使用HAVING子句,但我不确定这在列列表中是如何工作的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值