Mysql GROUPBY和COUNT或SUM在SQL查询中如何协同工作

Mysql GROUPBY和COUNT或SUM在SQL查询中如何协同工作,mysql,sql,Mysql,Sql,我想知道在SQL查询中,groupby和COUNT或SUM如何协同工作 例如,为什么以下代码成功地对每个组中的行使用了SUM函数,而不是组本身 SELECT product_name, SUM(SUBSTRING_INDEX(company_name, '|', -1) LIKE '%live%' AS count_live, SUM(SUBSTRING_INDEX(company_name, '|', -1) LIKE '%demo%' AS count_demo,

我想知道在SQL查询中,
groupby
COUNT
SUM
如何协同工作

例如,为什么以下代码成功地对每个组中的行使用了
SUM
函数,而不是组本身

SELECT 
    product_name,
    SUM(SUBSTRING_INDEX(company_name, '|', -1) LIKE '%live%' AS count_live,
    SUM(SUBSTRING_INDEX(company_name, '|', -1) LIKE '%demo%' AS count_demo,
 SUM(SUBSTRING_INDEX(company_name, '|', -1) NOT LIKE '%live%' AND SUBSTRING_INDEX(company_name, '|', -1) NOT LIKE '%demo%') AS count_other,
 COUNT(*) AS total
FROM foo GROUP BY product_name ORDER BY total DESC
;

它是如何执行的?此表达式的哪一部分在前面执行?

聚合函数,如
sum
count
基于一组行(由group by子句中指定的列聚合)返回结果,然后在您的情况下,您可以同时获得:具有相同产品名称的行中包含的值的和这些行的计数


group by CONDICTION以相同的方式领导聚合并负责所有聚合功能

“不是组本身”是什么意思?@scaisEdge我的意思是为什么它要计算每个组中的行,不是整个表的内容或类似的东西?我发布了一个asnwer..所以这只是一个规则,当指定
groupby
时,像
SUM
COUNT
这样的函数将返回基于组的结果,当忽略它时,将返回所有行的值,对吗?@Frozenhart如果您试图在没有指定group by的情况下使用聚合函数,它应该会对您大叫没有group by