如何在MySQL Select语句中按多个列进行分组

19 浏览
0 Comments

如何在MySQL Select语句中按多个列进行分组

上面是我在MySQL中使用Select语句的输出结果,请帮助我按exp_date和username对上述结果进行分组,以便对于相同日期的任何用户名只有1行结果。

它应该在2021-10-26的单行中显示S.M.gadekar用户名的住宿、膳食、洗衣和交通费用的值。

尝试了所有的想法,但是没有得到精确的结果。有什么实际的优化解决方案吗?

0
0 Comments

在MySQL的SELECT语句中,可以使用GROUP BY子句对结果进行分组。通常情况下,我们只需要按照一个列进行分组,但有时候我们需要按照多个列进行分组。然而,在使用多个列进行分组时,可能会遇到一些问题。

在上面的代码示例中,我们可以看到GROUP BY子句后面有两个列名,用逗号分隔。这意味着结果将按照exp_date列和username列进行分组。然而,这种用法可能会引发一些问题。

问题的原因是,当我们在SELECT语句中使用GROUP BY子句时,我们只能选择列名或者表达式,而不能直接选择别名。因此,在上面的代码中,如果exp_date或username具有别名,则会导致语法错误。

为了解决这个问题,我们可以使用列的位置索引来代替列名或别名。在GROUP BY子句中,我们可以使用列的位置索引代替列名,如下所示:

GROUP BY 1, 2;

在上面的代码中,1代表exp_date列的位置索引,2代表username列的位置索引。通过使用位置索引,我们可以避免使用列名或别名,从而避免语法错误。

当我们需要在MySQL的SELECT语句中使用多个列进行分组时,可能会遇到语法错误的问题。为了解决这个问题,我们可以使用列的位置索引来代替列名或别名。这样,我们就可以顺利地按照多个列进行分组了。

0
0 Comments

问题的出现原因是需要在MySQL的SELECT语句中按多个列进行分组。解决方法是使用GROUP BY语句,并在其中以逗号分隔的形式列出要分组的列。

具体的解决方法如下:

SELECT username, exp_date, 
    SUM(lodging) AS lodging,
    SUM(boarding) AS boarding,
    SUM(laundry) AS laundry,
    SUM(conveyance) AS conveyance
FROM table
GROUP BY exp_date, username;

如果要确保每人每天只有一行数据,可以在FROM和GROUP BY之间添加WHERE子句来筛选数据。

以上是解决问题的方法,不过根据表的设计来看,可能需要将表规范化为三个表,因为目前的设计只符合第二范式,但对于当前的需求来说,这样的设计已经足够。你可以点击下面的链接查看示例。

[sqlFiddle](http://sqlfiddle.com/#!9/195c05/2)

如果你想要每个人每天只有一行数据,而不是每个人每天都有数据,可以在FROM和GROUP BY之间添加WHERE子句来筛选数据。

你可以点击下面的链接查看示例。

[sqlFiddle](http://sqlfiddle.com/#!9/195c05/3)

0