sql中的mysql条件分组

dauxcl2d  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(658)

这应该很容易,但我有麻烦。
我有一个 results 如下所示的表:

  1. store_id cust_id spend_ind pct
  2. 200 2 A 0.33
  3. 200 2 B 0.33
  4. 200 3 A 0.33
  5. 300 1 A 0.50
  6. 300 100 B 0.50
  7. 400 2 A 0.33
  8. 400 2 B 0.33
  9. 400 5 B 0.33

请注意 pct 每个存储的列总和为1.0。以下是创建此表的代码:

  1. CREATE TABLE results(
  2. store_id int,
  3. cust_id int,
  4. spend_ind char,
  5. pct float
  6. );
  7. INSERT INTO results VALUES(200,2,'A',0.33);
  8. INSERT INTO results VALUES(200,2,'B',0.33);
  9. INSERT INTO results VALUES(200,3,'A',0.33);
  10. INSERT INTO results VALUES(300,1,'A',0.50);
  11. INSERT INTO results VALUES(300,100,'B',0.50);
  12. INSERT INTO results VALUES(400,2,'A',0.33);
  13. INSERT INTO results VALUES(400,2,'B',0.33);
  14. INSERT INTO results VALUES(400,5,'B',0.33);

我在创建一个新的类别时,尝试按商店,然后按客户id对结果进行分组 A&B 如果同一客户id同时具有 A 以及 B 特定商店的支出指标。以下是我试图输出的内容:

  1. store_id spend_ind pct
  2. 200 A&B 0.66
  3. 200 A 0.33
  4. 300 A 0.50
  5. 300 B 0.50
  6. 400 A&B 0.66
  7. 400 B 0.33

例如,客户2有消费模式 A 以及 B 对于商店200,我们创建了一个新的类别 A&B 这就是 pct 任何有消费模式的客户的列 A 以及 B .

pu82cl6c

pu82cl6c1#

我可以这样说:

  1. select
  2. store_id,
  3. cust_id,
  4. group_concat(spend_ind order by spend_ind separator '&') spend_ind,
  5. sum(pct) pct
  6. from results
  7. group by store_id, cust_id

您可能希望通过另一个聚合级别按新类别对客户进行分组:

  1. select store_id, spend_ind, sum(pct) pct
  2. from (
  3. select
  4. store_id,
  5. cust_id,
  6. group_concat(spend_ind order by spend_ind separator '&') spend_ind,
  7. sum(pct) pct
  8. from results
  9. group by store_id, cust_id
  10. ) t
  11. group by store_id, spend_ind

db小提琴演示

  1. store_id | spend_ind | pct
  2. -------: | :-------- | ---:
  3. 200 | A&B | 0.66
  4. 200 | A | 0.33
  5. 300 | A | 0.50
  6. 300 | B | 0.50
  7. 400 | A&B | 0.66
  8. 400 | B | 0.33
展开查看全部

相关问题