【发布时间】:2021-09-19 14:14:16
【问题描述】:
我想根据tx_id统计唯一值的个数,这里是部分原始数据:
table : Treatment Record
+------------------+-----------+----------------+------------------+
| SN | tx_id | pa3 | pa4 |
+------------------+-----------+----------------+------------------+
| I2120210007014 | 149362 | V16F2021117016 | V15S2021145018 |
| I2120210007014 | 149362 | V15S2021144019 | V15S2021145018 |
| I2120210007014 | 149362 | V16F2021117017 | V15S2021145018 |
| I2120210007014 | 149362 | V16F2021117017 | V15S2021145018 |
| I2120210007014 | 149362 | V16F2021117017 | V15S2021145018 |
| I2120210007014 | 148716 | V15C2021116010 | V15C20211091016|
+------------------+-----------+----------------+------------------+
例如,结果应如下所示:
+------------------+-----------+----------------+-------+
| SN | tx_id | V16F | V15S | V15C |
+------------------+-----------+-------+--------+-------+
| I2120210007014 | 149362 | 2 | 2 | 0 |
| I2120210007014 | 148716 | 0 | 0 | 2 |
+------------------+-----------+----------------+-------+
从原始数据中,您可以看到有两个不同的tx_id,我用它来识别每个组。因此,例如,所有tx_id = '149362 都在同一个组中。
而在pa3 和pa4 列中,有2 个不同的组,可以通过查看前4 个字符进行分类,例如“V16F”、“V15S”。此外,我必须计算同一组中不同措辞的数量。例如,您可以看到pa3 列包含V16F2021117016、V15S2021144019、V16F2021117017,而pa4 列仅包含。因此,有V15S2021145018。
因此,我们将“V16F”组计数为 2,将“V15S”组计数为 2。您可能会注意到,计数不是基于 pa3 和 pa4 列,而是基于最后 4 个字符。例如V16F2021117016和V16F2021117017,它们属于同一个组,“V16F”,但由于最后4个字符分别是'7016'和'7017',所以不同的单词。
但是我现在找不到出路,只在下面输入了一些 sql 代码。希望有人可以帮助我。
SELECT tx_id,
sum(case when val like 'V16F%' then 1 else 0 end),
sum(case when val2 like 'V15S%' then 1 else 0 end)
FROM ( select tx_id, pa3 as val, pa4 as val2 from Cool group by pa3, pa4)
GROUP BY tx_id
这是错误的输出:
+------------------+-----------+----------------+
| SN | tx_id | V16F | V15S |
+------------------+-----------+-------+--------+
| I2120210007014 | 149362 | 3 | 3 |
| I2120210007014 | 148716 | 0 | 0 |
+------------------+-----------+----------------+
【问题讨论】:
-
请参阅Tips for asking a good Structured Query Language (SQL) question。您似乎发布了图片而不是数据。
-
@车头。 . .在您的示例数据中,两列之间没有共享代码。总是这样吗?
标签: mysql sql database count distinct