mysql 用SQL语言实现基于多字段分类值的n × n记录计数矩阵

fcipmucu  于 2022-11-28  发布在  Mysql
关注(0)|答案(1)|浏览(134)

我想创建一个简单的n x n矩阵,其中n是我的数据中每个分类字段的每个可能的唯一值,矩阵中的值包含具有一对两个分类值的记录的计数。
使用以下示例数据(实际数据的复制)会更清楚
| 用户标识|性别|层|年龄组|
| - -|- -|- -|- -|
| aaaa|雄的|第1层|十五至二十四岁|
| 三位一体|雄的|第2层|二十五至三十四岁|
| cccc的|母的|第1层|十五至二十四岁|
| 日|母的|第3层|35岁至44岁|
| 咿咿|其他|零值|35岁至44岁|
| ffff的复数|雄的|第2层|45岁以上|

在我的实际表中,有20多个分类字段和500 k多条记录(user_id)
我想要的输出如下所示- [满足任意两个条件的记录计数],例如,居住在二级城市的男性用户数为2。因此,男性x二级城市的交集值为2。依此类推...

| n x n|雄的|母的|其他的|第1层|第2层|第3层|零值|十五至二十四岁|二十五至三十四岁|35岁至44岁|45岁以上|总计|
| - -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|- -|
| 雄的|三个|第0页|第0页|一个|2个|第0页|第0页|一个|一个|第0页|一个|三个|
| 母的|第0页|2个|第0页|一个|第0页|一个|第0页|一个|第0页|一个|第0页|2个|
| 其他的|第0页|第0页|一个|第0页|第0页|第0页|一个|第0页|第0页|一个|第0页|一个|
| 第1层|一个|一个|第0页|2个|第0页|第0页|第0页|2个|第0页|第0页|第0页|2个|
| 第2层|2个|第0页|第0页||||||||||
| 第3层|第0页|一个|第0页||||||||||
| 零值|第0页|第0页|一个||||||||||
| 十五至二十四岁|一个|一个|第0页||||||||||
| 二十五至三十四岁|一个|第0页|第0页||||||||||
| 35岁至44岁|第0页|一个|一个||||||||||
| 45岁以上|一个|第0页|第0页||||||||||
| 总计|三个|2个|一个||||||||||
我的用例是获取两个分类字段之间的重叠,以其他字段的百分比表示。
我不确定使用SQL是容易还是复杂。我搜索了相关的问题,但令人惊讶的是,我找不到任何解决方案。希望你能帮助我使用SQL。如果你需要澄清这个问题,请告诉我。

p8h8hvxi

p8h8hvxi1#

你必须找到重复数据的总和,然后你可以相应地显示在表中。
下面是查询

SELECT
  SUM(gender = 'male') as male,
  SUM(gender = 'female') as female,
  SUM(gender = 'others') as others,
  SUM(tier = 'tier1') as tier1,
  SUM(tier = 'tier2') as tier2,
  SUM(tier = 'tier3') as tier3,
  SUM(tier = 'null') as null,
  SUM(age_group = '15-24') as age_15_24,
  SUM(age_group = '25-34') as age_25_34,
  SUM(age_group = '35-44') as age_35_44,
  SUM(age_group = '45+') as age_45,
FROM users

您只需要用您的表名替换用户。

相关问题