似乎我没有得到它。请考虑此查询
SELECT COUNT(*) AS `numrows`
FROM (`exp_channel_titles` ch)
JOIN `exp_channel_data` cd ON `cd`.`entry_id`=`ch`.`entry_id`
LEFT JOIN `exp_matrix_data` md ON `md`.`entry_id`=`ch`.`entry_id` and field_id = 14
LEFT JOIN `exp_assessment_users` au ON `au`.`entry_id`=`ch`.`entry_id`
WHERE ch.channel_id = 4 GROUP BY `ch`.`entry_id`
返回2
但如果我将其更改为
SELECT *
FROM (`exp_channel_titles` ch)
JOIN `exp_channel_data` cd ON `cd`.`entry_id`=`ch`.`entry_id`
LEFT JOIN `exp_matrix_data` md ON `md`.`entry_id`=`ch`.`entry_id` and field_id = 14
LEFT JOIN `exp_assessment_users` au ON `au`.`entry_id`=`ch`.`entry_id`
WHERE ch.channel_id = 4 GROUP BY `ch`.`entry_id`
结果仅为1行。怎么样?
答案 0 :(得分:7)
您正在进行分组,这意味着内部匹配的行会折叠为单个实体。例如考虑一个这样的假表:
field
-----
a
a
是的,一个字段表,有两个记录,两个记录都包含值a
。
SELECT *
FROM table
GROUP BY field
group by
会找到所有具有相同值的字段,然后将它们折叠为SINGLE记录,这样您的两个a
记录就会在结果集中成为一行,最后你会得到
field
-----
a
但是在做
SELECT count(*)
FROM table
GROUP BY field
改变一切。现在,DB将逐字计算将多少记录折叠到结果集的单行中。所以你仍然在结果集中得到一个SINGLE行,其中包含group by
折叠了多少行的计数:
count(*)
--------
2
一行,值为2,因为有两行a
。
现在,如果你有一张包含更多记录的表:
field
-----
a
a
b
c
c
c
你会得到:
SELECT * ... GROUP BY field
field
-----
a
b
c
SELECT count(*), field ... GROUP BY field
count(*) field
----------------
2 a
1 b
3 c
再次,3行结果,但请注意计数如何表示原始表中每个分组字段的数量。