SQL查询事故

时间:2013-02-18 03:53:37

标签: mysql

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

其中一个问题只是显示共享同一办公室的所有员工。我觉得很容易

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

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

我的逻辑有问题吗?

4 个答案:

答案 0 :(得分: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]发出一行 - 在你的任务要求的意义上,这不是'分组',我认为。

答案 1 :(得分:1)

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

我想要所有为Office“X”工作的人(使用你感兴趣的WHERE子句 - Office ='X')

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

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

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

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

SELECT
    office, GROUP_CONCAT(name)
FROM
    my_db.employee
GROUP BY
    office