不能在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的主要内容,如果未能解决你的问题,请参考以下文章