0

新的 SQL'er 在这里。好的,对于学校作业,我决定在问题中构建表格,这样我就可以测试我的查询是否正确。

问题之一是简单地显示共享同一办公室的所有员工。容易我觉得

SELECT office, name
 FROM my_db.employee
 GROUP BY office;

但是当我运行它时,它只返回每个唯一办公室的第一个元组,而不是全部按办公室分组。

我的逻辑有问题吗?

4

4 回答 4

1

您只能选择 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] 只发出一行 - 我认为这不是你的任务要求的“分组”。

于 2013-02-18T03:56:15.470 回答
1

作为 SQL 的新手,您将需要学会区分所问的内容......

我希望所有为 Office "X" 工作的人(使用您感兴趣的 WHERE 子句 -- Office = 'X')

我想知道每个办公室有多少工作(使用 GROUP BY 子句,并包括您“分组依据”的所有字段)。

Group By 与在您想要共同的某些列上进行聚合相关联。经销商的汽车销售量。经销商每月有多少汽车销售......每个车型每月。

在进行聚合时,这些通常与 MIN()、MAX()、SUM()、AVG() 等相关联,并且许多引擎中的 group by 要求您列出所有非聚合字段以进行分组。

Explosion Pills 的答案可能最接近您想要的,并且是非数字或不可比较的聚合函数的例外(例如 min()、max())。Group_Concat() 告诉引擎一个接一个地构建一个字符串列表,只要它们都在同一个“组”分类(例如您的 Office)示例中。

祝你的教育好运,这里有很多人可以提供帮助。

于 2013-02-18T04:18:21.633 回答
0

考虑到您可以直观地检查行以查看谁在哪个办公室,或者非常简单地使用 MySQL 以外的其他语言进行聚合,您收到的问题对于如何呈现数据有点不清楚。也许他想要这样的东西?

SELECT
    office, GROUP_CONCAT(name)
FROM
    my_db.employee
GROUP BY
    office
于 2013-02-18T03:59:10.923 回答
0

SELECT 部分中的所有内容都必须出现在 GROUP BY 部分中,聚合字段除外。也就是说,您正在选择“办公室,姓名”,但仅按“办公室”分组。您需要按“办公室,姓名”分组。

于 2013-02-18T03:55:53.000 回答