我需要先在SELECT中删除重复项,然后再对其进行计数.我需要数一数已经做了多少次测试.患者无法在同一测试中获得相同的值.我试过DISTINCT,但结果是GROUP BY(DISTINCT)而不是GROUP BY(GROUP BY).基本相同,但DISTINCT将删除patient\u测试表中需要的其他列.我使用视图作为一种良好的做法,但我不确定这是否有帮助.

TLDR:我想通过改进嵌套组,但我找不到方法.

table: patient_test (12 rows)

Patient | Test      | Value
--------------------------------
Laura   | Test A    |  1.3
Laura   | Test B    |  8.9 <-          
Laura   | Test B    |  8.9 <-  
Laura   | Test C    |  8.9           
Charles | Test B    |  8.9           
Charles | Test B    |  4.6           
Charles | Test C    |  5.6           
Maria   | Test A    |  1.2 <--
Maria   | Test A    |  1.2 <--
Maria   | Test B    |  1.2
Maria   | Test B    |  8.9
Maria   | Test C    |  1.2

我这样排除重复项

SELECT * FROM patient_test 
GROUP BY Patient , Test, Value 

得到:

table: patient_test (10 rows)

Patient | Test      | Value
--------------------------------
Laura   | Test A    |  1.3
Laura   | Test B    |  8.9         
Laura   | Test C    |  8.9           
Charles | Test B    |  8.9           
Charles | Test B    |  4.6           
Charles | Test C    |  5.6           
Maria   | Test A    |  1.2  
Maria   | Test B    |  1.2
Maria   | Test B    |  8.9
Maria   | Test C    |  1.2

然后我这样计算:(我想改进的)

SELECT TestName, count(*) AS Result FROM 
(SELECT * FROM patient_test 
GROUP BY Patient , Test, Value) AS tempPatient
GROUP BY tempPatient.TestName;

我使用的是视图,但我认为排除重复项并立即将其设置为GROUP BY可能会更好.

SELECT TestName, count(*) AS Result FROM 
(CustomView) AS tempPatient
GROUP BY tempPatient.TestName;

我不能将此列用作解决方案的一部分,因为它将删除其他过程所需的其他列.

SELECT DISTINCT Patient,Test,Value
FROM patient_test

这就是我需要的:

TestName  | Result
----------------------
Test A    |  2
Test B    |  5
Test C    |  3 

我认为没有必要跑GROUP BY次.我想找到一种使用示例排除重复项的方法.

推荐答案

与其他数据库不同,MySql允许在COUNT()中使用DISTINCT引用多个列:

SELECT Test, COUNT(DISTINCT Patient, Value) AS Result
FROM patient_test 
GROUP BY Test;

See the demo.

Mysql相关问答推荐

在mySQL中使用子查询和WHERE子句的JOIN

如何有效地计算共同的朋友/追随者?

优化使用ORDER BY加载耗时较长的MySQL请求

根据当前表列的值,从SQL中的另一个表中获取数据

从表中 Select 具有不同顺序的列

SQL 请求:REPLACE 和通配符 %.如何做正确的事?

将 JSON 类型的列与特定字符串值进行比较

是否可以使用 IN 或 NOT IN 从没有关联其他表中任何行的表中返回这些名称?

仅当 SELECT 语句在 MySQL 中给出空集时才执行 UPDATE 语句

使用sql查找源和最终目的地

如何计算每行的剩余金额?

MYSQL:如何根据之前的相关记录获取记录

非常规字符的不正确字符串值错误

如何判断嵌套查询返回的元组中的每个条目是否相同?

MYSQL 或 Laravel Eloquent 如何从这个订单中统计细节

在 MySQL 的存储过程中调用存储过程

PHP,MySQL 错误:列计数与第 1 行的值计数不匹配

MySQL - 如何在 INSERT 语句中将字符串值解析为 DATETIME 格式?

如何在mysql中连接整数(整数和整数)和varchar(nvarchar和varchar)等数据类型?

计算执行的查询数