如何用单条MySQL语句统计各test-id对应的q-id数量?
如何统计每个test-id对应的唯一q-id数量?
嗨,这个需求用MySQL的分组查询就能轻松实现,单条SQL语句就搞定啦!
你可以用GROUP BY子句配合COUNT(DISTINCT)来完成统计,具体语句如下:
SELECT `test-id`, COUNT(DISTINCT `q-id`) AS unique_q_count FROM `test` GROUP BY `test-id`;
给你拆解一下语句的作用:
GROUP BY \test-id`:把表中的数据按照test-id进行分组,每个分组对应一个唯一的test-id`值(也就是你说的1到160的每个值)COUNT(DISTINCT \q-id`):统计每个分组里**不重复**的q-id数量,用AS unique_q_count`给结果列起一个直观好读的别名- 执行这条语句后,会返回两列数据:一列是各个
test-id值,另一列就是对应test-id下的唯一q-id总数
如果你的业务场景里,每个test-id对应的q-id本身就不会出现重复(比如你例子里每个test-id最多100个q-id且都是唯一的),也可以把语句简化成COUNT(\q-id`),不过保留DISTINCT`会更稳妥,能避免意外出现的重复数据影响统计结果。
举个例子,针对你给出的test-id=1的示例数据,这条语句会返回:
test-id | unique_q_count 1 | 100
其他test-id的统计结果也会按同样的格式返回哦。
内容的提问来源于stack exchange,提问作者pranav nerurkar
相关产品推荐
相关产品推荐

