【问题标题】:how to write COUNT(DISTINCT()) query?如何编写 COUNT(DISTINCT()) 查询?
【发布时间】:2015-10-03 14:38:21
【问题描述】:

请帮我解决这个问题。

我有一个表学生,看起来像:

*id, name, surname, year, course*
1, John, Johnson, 3, Economy
2, Lara, Croft, 2, Biology
3, Mark, Jones, 3, Economy
4, Jim, Smith, 1, IT
5, Sarah, Kennedy, 1, IT
6, Matt, Damon, 3, Economy

并希望将所有有学生参加的课程作为结果集,例如:

*course, count*
Economy, 3
IT, 2
Biology, 1

【问题讨论】:

  • 你自己最好的镜头是什么?它返回什么?你认为它有什么问题?届时我们会介入提供帮助。
  • 你好像知道用什么函数了;尝试将其放入查询中。
  • 您的样本数据表明不需要DISTINCT
  • 呃,我的尝试非常错误。从学生中选择课程,计数(DISTINCT(id));结果我得到了经济,6。
  • @Prpaa:当您使用count 时,这将导致整个结果的隐式组。选择任何没有聚合的数据都会得到组中的一个值,即使有不同的值,所以隐式分组只有在你只通过聚合获取数据时才有用。

标签: mysql sql postgresql sqlite


【解决方案1】:

您不会为此使用count(distinct ...),只需在课程中分组并使用count()

select
  cource,
  count(*)
from
  Students
group by
  cource
order by
  cource

如果您想在组内进行不同的计数,例如计算 year 的不同值(在所有记录的隐式组中),使用 count(distinct ...) 很有用:

select
  count(distinct year)
from
  Students

这将为您提供3 的结果,因为存在三个不同的值123

【讨论】:

    猜你喜欢
    • 2020-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多