我想查找每学期每学期明智的学生上课人数。 以下是给出正确答案的查询
select semester,subject,count(stdId)
from tblSubjectMaster
group by subject, semester
但我也尝试过其他查询和它给出不同的结果。查询是
select semester,subject,count(stdId)
from tblSubjectMaster
group by subject and semester
和,分组依据之间有什么区别?
答案 0 :(得分:2)
GROUP BY subject, semester
意味着在subject
和semester
的每个唯一组合的结果集中创建一行,并带有该组合的行数。
subject and semester
是一个逻辑表达式,如果TRUE
和subject
均为true,则为semester
,否则返回FALSE
。如果该列包含字符串,则非空值为true,空字符串为false;否则为false。如果该列包含数字,则非零值为true,零为false。
因此,您最多将在结果中得到两行。两组都为真的所有行都为一组,其他所有行均为一组。
GROUP BY col1 AND col2
几乎没有用。
答案 1 :(得分:1)
逗号分隔表达式。 group by subject, semester
正在为每个不同的值对创建一个单独的组。我想这就是您想要的。
使用AND
的示例只是一个布尔表达式,只有两个不同的组,一个用于 true ,另一个用于 false 。 AND
是布尔运算符。它计算两个操作数,然后给出它们之间的布尔连接。
因此,它仅将subject
和semester
都评估为布尔值,然后如果两个都为true,则整个布尔表达式为true。这就是布尔AND
的工作方式。
MySQL将布尔值与整数值1表示为true,将0表示为false相同。因此它将subject
和semester
视为数字。这可能会产生意外的结果。
如果要按两列分组,则应使用逗号。