之间的是什么,(逗号),并在GROUP BY区别?

时间:2019-02-02 02:20:20

标签: mysql sql group-by

我想查找每学期每学期明智的学生上课人数。 以下是给出正确答案的查询

select semester,subject,count(stdId) 
from tblSubjectMaster 
group by subject, semester

但我也尝试过其他查询和它给出不同的结果。查询是

select semester,subject,count(stdId) 
from tblSubjectMaster
group by subject and semester

和,分组依据之间有什么区别?

2 个答案:

答案 0 :(得分:2)

GROUP BY subject, semester意味着在subjectsemester的每个唯一组合的结果集中创建一行,并带有该组合的行数。

subject and semester是一个逻辑表达式,如果TRUEsubject均为true,则为semester,否则返回FALSE。如果该列包含字符串,则非空值为true,空字符串为false;否则为false。如果该列包含数字,则非零值为true,零为false。

因此,您最多将在结果中得到两行。两组都为真的所有行都为一组,其他所有行均为一组。

GROUP BY col1 AND col2几乎没有用。

答案 1 :(得分:1)

逗号分隔表达式。 group by subject, semester正在为每个不同的值对创建一个单独的组。我想这就是您想要的。

使用AND的示例只是一个布尔表达式,只有两个不同的组,一个用于 true ,另一个用于 false AND是布尔运算符。它计算两个操作数,然后给出它们之间的布尔连接。

因此,它仅将subjectsemester都评估为布尔值,然后如果两个都为true,则整个布尔表达式为true。这就是布尔AND的工作方式。

MySQL将布尔值与整数值1表示为true,将0表示为false相同。因此它将subjectsemester视为数字。这可能会产生意外的结果。

如果要按两列分组,则应使用逗号。