新的 SQL'er 在这里。好的,对于学校作业,我决定在问题中构建表格,这样我就可以测试我的查询是否正确。
问题之一是简单地显示共享同一办公室的所有员工。容易我觉得
SELECT office, name
FROM my_db.employee
GROUP BY office;
但是当我运行它时,它只返回每个唯一办公室的第一个元组,而不是全部按办公室分组。
我的逻辑有问题吗?
新的 SQL'er 在这里。好的,对于学校作业,我决定在问题中构建表格,这样我就可以测试我的查询是否正确。
问题之一是简单地显示共享同一办公室的所有员工。容易我觉得
SELECT office, name
FROM my_db.employee
GROUP BY office;
但是当我运行它时,它只返回每个唯一办公室的第一个元组,而不是全部按办公室分组。
我的逻辑有问题吗?
您只能选择 group by 语句中的列,或者使用聚合函数(sum、count 等)
所以,
select office, count(name) from my_db.employee group by office;
会工作,但这当然不是你想要的。
你可能想要一些简单的东西
select office, name from my_db.employee order by office
这将显示他们按办公室“分组”。GROUP BY 要求 SQL 每个 GROUP BY 变量 [s] 只发出一行 - 我认为这不是你的任务要求的“分组”。
作为 SQL 的新手,您将需要学会区分所问的内容......
我希望所有为 Office "X" 工作的人(使用您感兴趣的 WHERE 子句 -- Office = 'X')
我想知道每个办公室有多少工作(使用 GROUP BY 子句,并包括您“分组依据”的所有字段)。
Group By 与在您想要共同的某些列上进行聚合相关联。经销商的汽车销售量。经销商每月有多少汽车销售......每个车型每月。
在进行聚合时,这些通常与 MIN()、MAX()、SUM()、AVG() 等相关联,并且许多引擎中的 group by 要求您列出所有非聚合字段以进行分组。
Explosion Pills 的答案可能最接近您想要的,并且是非数字或不可比较的聚合函数的例外(例如 min()、max())。Group_Concat() 告诉引擎一个接一个地构建一个字符串列表,只要它们都在同一个“组”分类(例如您的 Office)示例中。
祝你的教育好运,这里有很多人可以提供帮助。
考虑到您可以直观地检查行以查看谁在哪个办公室,或者非常简单地使用 MySQL 以外的其他语言进行聚合,您收到的问题对于如何呈现数据有点不清楚。也许他想要这样的东西?
SELECT
office, GROUP_CONCAT(name)
FROM
my_db.employee
GROUP BY
office
SELECT 部分中的所有内容都必须出现在 GROUP BY 部分中,聚合字段除外。也就是说,您正在选择“办公室,姓名”,但仅按“办公室”分组。您需要按“办公室,姓名”分组。