gpt4 book ai didi

sql - PostgreSQL GROUP BY LOWER() 不工作

转载 作者:行者123 更新时间:2023-11-29 11:27:36 25 4
gpt4 key购买 nike

我正在尝试在 PostgreSQL 9.4.1 中使用 GROUP BY,但没有像我希望的那样成功。

several folksthe web声称这应该有效,但我无法得到相同的结果。我想要的只是一个不区分大小写的 GROUP BY 但每次我添加 LOWER() 它都会提示:

ERROR: column "people.fn" must appear in the GROUP BY clause or be used in an aggregate function

CREATE DATABASE TEST;
CREATE TABLE people (id INTEGER, fn TEXT, ln TEXT); /* ID, firstname, lastname */

INSERT INTO people (id, fn, ln) VALUES(1,'Mike','f');
INSERT INTO people (id, fn, ln) VALUES(2,'adam','b');
INSERT INTO people (id, fn, ln) VALUES(3,'bill','b');
INSERT INTO people (id, fn, ln) VALUES(4,'Bill','r');
INSERT INTO people (id, fn, ln) VALUES(5,'mike','d');
INSERT INTO people (id, fn, ln) VALUES(6,'mike','c');
INSERT INTO people (id, fn, ln) VALUES(7,'Mike','T');

SELECT fn FROM people GROUP BY LOWER(fn); /* will not run */
SELECT fn FROM people GROUP BY fn; /* runs, but not what I want */

这是我得到的:

adam
mike
Mike
bill
Bill

这是我想要的:

Mike
adam
bill

显然,我缺少一些东西。不,我不能在将数据放入数据库时​​就对其进行清理。我应该阅读什么来理解这一点?

最佳答案

一般来说,如果你想在聚合查询中选择某物,你必须根据这个“某物”进行分组。在您的情况下,您可以通过选择 lower(fn) 获得您想要的结果:

select lower(fn)
from people
group by lower(fn)

幸运的是,PostgreSQL 允许您按别名分组,因此您不必重复 lower(fn) 两次:

select lower(fn) as lfn
from people
group by lfn

sql fiddle demo

正如@okaram 在评论中提到的,如果您不需要表中的任何其他聚合,您最好使用distinct:

select distinct lower(fn)
from people

关于sql - PostgreSQL GROUP BY LOWER() 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29856589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com