不能在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数据库中查询语句Order By和Group By有啥区别
SQL语句中,如果有group by 和order by两个语句,是先分组还是先排序?