不能在sql中混合order by和group by

Posted

技术标签:

【中文标题】不能在sql中混合order by和group by【英文标题】:can't mix order by and group by in sql 【发布时间】:2012-10-04 10:20:00 【问题描述】:

我遇到了 sql 问题。我不知道为什么访问和 sql server 一直显示错误。 我使用 phpmyadmin,但没有问题。

我有 1 张桌子。我的表名是 t_data

ID  MasterCode  DetailCode  Description  Item  Status
1       1           1.1      Resources   Meat     1
2       1           1.1      Resources   Meat     1
3       1           1.1      Resources   Meat     1
4       1           1.1      Resources   Meat     1
5       3           3.1       Utility    oil      1
6       2           2.1      Transport   BBM      1

我想查询该表并希望结果如下所示:

MasterCode  Description
    1       Resources
    2       Utility
    3       Transport

这是我的 sql 语法

"select MasterCode, Description from t_data group by Description order by MasterCode"

通常我只是使用那个 sql 语法,我可以得到我想要的。但现在我不能。

您尝试执行的查询不包含作为聚合函数的指定表达式。

如果我使用 access 和 sql server,我会收到该错误。如果我在 XAMPP 中使用 phpmyadmin,它工作正常。但我不想使用 phpmyadmin。我想使用访问或sql server。

我已经在谷歌上搜索过这个错误。我把我的 sql 改成这个。

"select count(*), Description from t_data group by Description "

"select a.categoryMaster, b.categoryDesc from t_category a inner join t_category b on a.categoryDetail = b.categoryDetail"

没有解决我的问题,因为我也想获得 MasterCode。

有什么解决办法吗?谢谢。

【问题讨论】:

【参考方案1】:

你可以使用DISTINCT:

select distinct MasterCode, Description 
from t_data
order by MasterCode;

见SQL Fiddle with Demo

或者你可以使用像MAX()这样的聚合函数:

select max(MasterCode) MasterCode, Description 
from t_data
group by Description
order by MasterCode;

见SQL Fiddle with Demo

【讨论】:

我喜欢独特的,但除此之外,为什么不SELECT t_data.mastercode, t_data.description FROM t_data GROUP BY t_data.mastercode, t_data.description @Remou 我最初选择DISTINCT,当我要添加GROUP BY 答案时,它已经发布了,所以我不想复制它。 :) Remou - 在我发布这个问题之前,我已经很喜欢你所说的了。但我有一个错误。 :) @bluefeet - 感谢您的回答。它是正确的..但第二个它给了我一个错误。 :)【参考方案2】:

试试这个

SELECT MasterCode, Description 
FROM t_data 
GROUP BY Description, MasterCode 
ORDER BY MasterCode

【讨论】:

嗨.. 感谢您的回答。它给了我正确的输入..但蓝脚先来..我只是投票+1。谢谢。 :) 很高兴看到它对您有所帮助! :)【参考方案3】:
select min(MasterCode) MasterCode, Description 
from t_data 
group by Description 
order by MasterCode

select MasterCode, Description 
from t_data 
group by MasterCode,Description 
order by MasterCode

【讨论】:

嗨..谢谢你的回答..第一个是正确的..但是第二个,我遇到了一个错误.. bluefeet首先给出正确的答案..我只是给+1投票你的。谢谢。 :) 我收到了这个错误。 "查询定义的 SELECT 列表中的别名 'MasterCode' 引起的循环引用... 您只需检查 Anil Soman 的上述答案。它的查询相同。 对不起..打错了..第二个是正确的..第一个是错的。 请立即检查。在我用作关键字的 sql server 中。但在 mysql 中不需要

以上是关于不能在sql中混合order by和group by的主要内容,如果未能解决你的问题,请参考以下文章

sql中group by和order by的区别

SQL数据库中查询语句Order By和Group By有啥区别

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?

SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?

sql语句执行顺序之group by、order by

当sql语句中where,order by,group by同时使用查询sql语句中三者的顺序