【问题标题】:Different output when I include more columns to the select statement in MySQL当我在 MySQL 中的 select 语句中包含更多列时,输出不同
【发布时间】:2021-04-15 14:02:51
【问题描述】:

为什么我在运行这两个查询时没有得到相同的结果?如果我运行第二个,我会得到学分最少的课程,当我运行第一个时,我会得到按 courseid 排序的课程

select min(credits), title, courseid 
from course 
group by title, courseid

select min(credits)
from course 

【问题讨论】:

  • 你应该看看 GROUP BY 运算符的含义和行为...

标签: mysql sql aggregate min


【解决方案1】:

聚合查询是具有group by 或select 中的聚合函数的任何查询。

聚合查询每组返回一行,其中“组”定义为group by 子句中键值的唯一组合。如果没有group by 子句,则将所有行视为一个组并返回一行。

因此,您的第一个查询为course 表中title 和courseid 的每个组合返回一行。该行包含该组合的最小值credits。如果course 表中每个courseid 只有一行,则结果与表中的内容非常相似。

第二个查询总共返回一行,所有行的积分最少。

如果您想获得一个 row 并具有最少的积分,那么您不需要聚合查询。相反,您可以使用:

select c.*
from course c
order by c.credits
limit 1;

【讨论】:

    【解决方案2】:

    当您使用分组依据时,您使用的是一种“过滤器”,在第一个查询中您按标题分组,然后所有相同的标题按 courseid 分组,第二个您只选择学分的最小值没有过滤。

    按文档查看一个组,也许有一些像这样的图形示例:

    https://www.geeksforgeeks.org/sql-group-by/

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 2013-09-09
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      相关资源
      最近更新 更多