【发布时间】:2012-09-15 21:44:50
【问题描述】:
我正在尝试使用以下条件从 Oracle 数据库表中检索数据
- 按邮政编码找到的所有条目都应分组,按邮政编码降序排序。
- 按城市找到的条目应按字母顺序分组。
- 按经销商名称找到的所有条目都应按字母顺序分组和排序。
为了满足上述条件,我编写了如下查询
SELECT DISTINCT ba.uuid AS uuid
, COUNT(*) over() AS rowcount
FROM basicaddress ba
WHERE ba.postalcode='143456'
OR ba.lastname LIKE '%143456%'
OR ba.city LIKE '%143456%'
GROUP BY
CASE WHEN ba.postalcode='143456' THEN ba.postalcode END
ORDER BY
CASE WHEN ba.postalcode='143456' THEN ba.postalcode END DESC,
CASE WHEN ba.lastname LIKE '%143456%' THEN ba.lastname END ASC,
CASE WHEN ba.city LIKE '%143456%' THEN ba.city ELSE ba.postalcode END DESC
此查询在 MYSQL 中运行良好,但在 oracle 中它说 “不是 GROUP BY 表达式”
任何帮助将不胜感激
【问题讨论】:
-
不,这在任何 SQL 方言中都会出错。
-
@ypercube
select ename, dept from emp group by dept在 MySql 中工作,只是 ename 不保证相同。它是从组中选择的。我同意这是一个误导性的错误来源,尤其是对于初学者。 -
@Florin:我不是指那个。请参阅问题的第一版。
CASE表达式无效。