sql - MAX 选择中的 SQL 计数
问题描述
我需要将样本表中的一些数据与交叉表值的计数进行交叉表。在下表中,我显示了两个参与者的一些记录,我需要将此信息与 PID 上的分组交叉表。
以下是表格中的一些数据:
PID SAMPLE_TYPE SAMPLE_VOLUME
PID1 PLASMA_EDT 250
PID1 PLASMA_EDT 1200
PID1 PLASMA_EDT 1000
PID1 PLASMA_EDT 1000
PID1 PLASMA_EDT 1000
PID1 SER 500
PID1 SER 500
PID1 SER 1000
PID2 PLASMA_EDT 250
PID2 PLASMA_EDT 1200
PID2 PLASMA_EDT 1000
PID2 PLASMA_EDT 500
PID2 PLASMA_EDT 1000
PID2 SER 500
PID2 SER 1000
PID2 SER 1000
我需要的输出如下:
PID PLA_250 PLA_500 PLA_1000 PLA1200 SER_500 SER_1000
PID1 1 0 3 1 2 1
PID2 1 1 2 1 1 2
所以我尝试了以下方法,但出现了错误:
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
.
SELECT S.C_PID AS PID,
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '250' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_250',
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '500' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_500',
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '1000' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_1000',
MAX(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '1200' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'PLA_1200',
MAX(CASE WHEN S.SAMPLE_TYPE = 'SER' AND S.SAMPLE_VOLUME = '500' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'SER_500',
MAX(CASE WHEN S.SAMPLE_TYPE = 'SER' AND S.SAMPLE_VOLUME = '1000' THEN COUNT(CONCAT (S.SAMPLE_TYPE, S.SAMPLE_VOLUME)) ELSE '' END) AS 'SER_1000'
FROM SAMPLE S
WHERE S.C_PID IN ('PID1','PID2')
AND S.SAMPLE_TYPE IN ('PLASMA_EDT','SER')
GROUP BY S.C_PID
我应该如何解决这个问题?
谢谢,格雷格
解决方案
你可能想要:
SUM(CASE WHEN S.SAMPLE_TYPE = 'PLASMA_EDT' AND S.SAMPLE_VOLUME = '250' THEN 1 ELSE 0 END) AS 'PLA_250',
推荐阅读
- r - 使用 R boxplot() 创建分组箱线图
- react-native - TouchableOpacity 和 TouchableHighlight 始终禁用
- python-3.x - Tensorflow CNN 零精度?
- kubernetes - 2 kubernetes中的负载均衡
- c - uefi 规范示例提到了 EfiCoreImageHandle。如何得到它?
- python - PANDAS - 如何根据索引中的值为整行着色
- powershell - Powershell在循环中获取枚举器
- java - 为什么 IntelliJ 调试器会跳过某些 if 语句的断点?
- laravel - 如何存储身份验证会话
- c++ - 一些 C++ 指南和使用组合创建对象