我想从一个表中选择两个列(A & B),并且只保留其中一个(A)的不同值。但是,A的单个值可以映射到B的多个值,因此下面的查询不能工作。
select distinct A, B from table1
我在想这样的事情:
select A, agg(B) from table1 group by A
我希望agg函数只是随机地从B中选择一个值,同时分组A。如何在Postgres中这样做?
假设在postgres中有一个简单的表,如下所示:
+--------+--------+----------+
| Car | Pet | Name |
+--------+--------+----------+
| BMW | Dog | Sam |
| Honda | Cat | Mary |
| Toyota | Dog | Sam |
| ... | ... | ... |
我想运行一个sql查询,它可以返回第一列中的列名和第二列中的唯一值。例如:
+--------+--------+
我试图在表的每一列中找到不同值的数目。声明性,即:
for each column of table xyz
run_query("SELECT COUNT(DISTINCT column) FROM xyz")
查找表的列名显示为。
SELECT column_name
FROM information_schema.columns
WHERE table_name=xyz
但是,我无法将计数查询合并到内部。我尝试了各种查询,这一个:
SELECT column_name, thecount
FROM information_schema.columns,
在使用SELECT的任何DISTINCT ON查询中,如何额外获得结果集中每一行的重复数?
就拿吧。
SELECT
DISTINCT ON (building)
building,
name
FROM ...
WHERE ...
这将只返回每个建筑物的第一个结果。我想添加另一列,结果如下所示:
name | building | excluded
Fred | Office | 0
Bob | Storage | 3
当储藏室里的人比鲍勃多的时候。我用的是Postgres 10。
我使用Grafana,我想从数据库中选择不同的记录。我怎么能这么做?
查询是:
SELECT reference AS "Reference", reference_url AS "Reference URL" FROM daily_run_vehicle WHERE retries >= 5 GROUP BY reference, reference_url ORDER BY 1;
但当我尝试:
SELECT DISTINCT (reference) AS "Reference", reference_url AS "R
能不能在以下几个方面帮助我:
我有一个查询,结果是两列,一列是从表中直接生成的(columnA),另一列是从子查询(columnB)生成的。如果我在columnB上进行排序(即ORDER ),那么在columnA (50+时间)上执行同样的排序时,响应会慢得多。是否有办法加快columnB上的排序,以便接近columnA排序时的速度?
注:引擎为Postgres
更新:查询看起来类似于:
select columnA, array_to_string(array(select ... from tableB where ...), '%') as columnB
from ta
Django 1.8和1.9,Postgres DB。
我有一个Contest模型,它可以有许多由Users提交的相关Entry对象。
class Contest(models.Model):
title = models.CharField(max_length=50)
class Entry(models.Model):
contest = models.ForeignKey(Contest, related_name="entries")
user = models.ForeignKey(settings.AUTH_USER_MODEL)
我希望
我试图在一个查询中获取所有列的不同计数。考虑下表。
COL1 | COL2 | COL3
A | 5 | C
B | 5 | C
C | 5 | C
C | 5 | C
D | 7 | C
预期结果
DC_COL1 | DC_COL2 | DC_COL3 #DC - Distinct count
4 | 2 | 1
虽然在使用有效的group函数的单个查询(单个完整表扫描)中无法实现上述结果(AFAIK),但这里可以做哪些优化工作?
对每一列进行个别查询可能会导致对每一列进行全表扫描。虽然整个表可能在第
我用的是Postgres 9.4
我的查询中有一个select语句,如下所示:
SELECT date_part('year'::text, c.date) AS yyyy,
to_char(c.date, 'MM'::text) AS monthnumber,
to_char(c.date, 'TMMonth'::text) AS monthname,
l.id AS lineID,
n.id AS networkID,
l.name AS lineName,
count(c.*) AS coun
我在postgres 11上有一个postgresql表,其中有一列人和一列他们喜欢的航空公司。
Name | Airlines
----------------
Patrick | Delta
Patrick | United
Patrick | American
James | Delta
Sophie | United
Sophie | American
John | United
我需要一个表中的值,如果某人在他们喜欢的航空公司中有达美航空,那么他们就有达美航空,否则他们就会得到像这样的其他航空公司,期望的结果。
Name | Airlines
------------
我正在编写触发器,希望查看是否有一列更改为NULL,并试图避免以下情况:
IF NEW.value != OLD.value
OR (NEW.value IS NULL AND OLD.value IS NOT NULL)
OR (NEW.value IS NOT NULL AND OLD.value IS NULL) THEN
...
END IF;
这是函数中的postgres 9.5 (存储过程)
我是RDBMS的新手。
Postgres帮助我完成自动完成任务,但它不适用于FROM、WHERE和SELECT子句中的DISTINCT。
当然,它已经连接到数据库了。还有要查询的架构和表。
例如,当我尝试输入以下查询时,SELECT后面的所有关键字都不会自动完成;
SELECT DISTINCT district FROM city WHERE countrycode = 'JPN';
但是,在我完成手动输入并运行之后,没有出现错误。Postgres通常返回结果。
尽管如此,它仍然适用于其他子句,如CREATE和ALTER。
我怎么能自动完成这些?谢谢。
我刚刚遇到一个SQL查询,特别是针对Postgres数据库的查询,它使用了一个名为"distinct“的函数。即:
select distinct(pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...
注意,这不是SELECT上的普通DISTINCT限定符--至少它不是DISTINCT限定符的常规语法,请注意括号。它显然是将DISTINCT用作函数,或者这可能是某种特殊的语法。
你知道这意味着什么吗?
我试着玩了一下,如果我写
select distinct(foo)
from bar
我得到的
Postgres版本11.10
下面是我的postgres模式,它使用jsonb字段
create table data(
key char(32), --md5
time int NOT NULL,
output jsonb NOT NULL,
PRIMARY KEY (key,time)
)
以下是两个工作正常的查询
select distinct on(key) key from data ORDER BY key,time DESC
select distinct on(key) key,output from
我有一个可以运行的查询,它生成如下所示的行:
ID | category | property_A | property_B
----+----------+------------+------------
1 | X | tall | old
2 | X | short | old
3 | X | tall | old
4 | X | short | young
5 | Y | short |
我有一个查询要从Postgres (10.1)迁移到(13.0)
在Postgres中使用的查询是:
SELECT *
FROM source
WHERE
1 = CASE
WHEN 234 NOT IN (SELECT user_id
FROM usergroup)
THEN SOURCE .source_id IN (SELECT DISTINCT sl.source_id
FROM sour
我必须以以下方式在一个表上执行select :我在2列中搜索一些字符串,搜索字符串可以在其中一个列中,也可以在第二列中,或者在这两个列中。
要从单个列中进行选择,我将使用类似于:
SELECT * FROM table
WHERE TITLE LIKE '%pat1%' OR TITLE LIKE '%pat2%' OR TITLE LIKE '%pat3%' etc.
搜索模式没有限制。
但是我想执行这个查询,这样它就可以检查搜索模式是在一列中还是在另一列中。
我正在尝试查询一个表,并获得一列结果,那么这一列有多少个结果。目前,我必须分别运行两个查询,如下所示:
SELECT DISTINCT field_a
FROM table_a
WHERE property_a = 1
AND property_b = 2;
SELECT COUNT(DISTINCT field_a)
FROM table_a
WHERE property_a = 1
AND property_b = 2;
我更愿意将它们组合在一起,因为它们执行的是相同的查询,但我不知道如何进行。就像这样
SELECT COUNT(DISTINCT field_a) AS my_count
我有以下Hibernate HQL查询:
select t from Term t join ApprovedCourse ap on t.id = ap.term.id group by t order by t desc
它失败了,因为
ORA-00979: not a GROUP BY expression
错误,因为Oracle坚持所有select值都在group by中。当然,Hibernate对我们隐藏了术语对象的各个字段,让我们可以将其作为术语而不是Term.id来处理。(顺便说一句,这个查询适用于Postgres。Postgres在按需求分组方面更加自由。)
Hibernate
我有一个有B元素集合的实体A。
我想创建一个基本上这样做的查询:
Select a, count(b) from A a inner join fetch a.b b group by a
我希望得到一个Array对象,其中元素0是我的A实体,元素1是一个数字,它是集合中的数字。
Jpa (由hibernate支持)引发以下错误:
Caused by: java.sql.SQLException: Not in aggregate function or group by clause: org.hsqldb.Expression@16d829b1 in statement (sql q
我有一个表应用程序,它有10列。类别是一列,该列具有重复的值。要获得不同的值,我有一个查询
SELECT distinct(CATEGORY) as CategoryName FROM APPLICATION where applicationId=?。
我得到的结果没有任何问题。现在,我想添加另一列为categoryId。没有这样的字段,我必须生成一个字段。我尝试了下面的查询。
SELECT distinct(CATEGORY) as CategoryName , rownum as categoryId FROM APPLICATION where applicationId=?
然后,它
我有一个Postgres查询:
select id,
from ads_1 as a
join ads_2 as b
on a.id_key = b.id_key
where b.date between '2014-01-01' and '2014-01-02'
group by id
order by id;
它没什么特别之处,但运行良好--当查询大型数据库返回结果时,只需要大约3分钟。
我的问题是,为什么对上述代码的轻微修改会导致查询时间增加四倍以上?
select id,
我需要在桌子上找到复制件。在MySQL中,我只需写:
SELECT *,count(id) count FROM `MY_TABLE`
GROUP BY SOME_COLUMN ORDER BY count DESC
这个查询很好:
基于SOME_COLUMN查找重复项,并给出其重复计数。
排序按顺序重复,这是有用的快速扫描主要的欺骗。
为所有剩余的列选择一个随机值,使我对这些列中的值有一个概念。
Postgres中的类似查询向我问好时出错:
列"MY_TABLE.SOME_COLUMN“必须出现在GROUP子句中,或用于聚合函数中。
与此查询等效的Post
SELECT DISTINCT ON (some_col)
*
FROM my_table
我想知道这是否有效,是否会像预期的那样工作。也就是说,这会基于不同的my_table返回所有列吗?我已经阅读了Postgres文档,没有看到任何理由不能像预期的那样工作,但是在这里已经阅读了旧的注释,因此在使用distinct时需要显式列出列。
我知道显式列出列是最好的做法,并且在执行上述操作时也使用order。
您可能不需要或不关心的背景
出于背景和我问的原因,我们正在从MySQL迁移到Postgres。MySQL有一个非常不符合标准的“技巧”,它允许SELECT * ... GROUP BY允许基于
我有一个查询,当键发生冲突时,只有在对其他列进行更改时才会将其插入Postgres (为了避免不必要的插入和返回的行,实际上什么都没有更改):
INSERT INTO public.test_upsert (some_id, a, b, note)
VALUES
('c', 1, true, 'asdf')
ON CONFLICT (some_id)
DO UPDATE SET
a = excluded.a,
b = excluded.b,
note = excluded.note
WHERE
test_upsert.a IS D
UPDATE amc_machine b
SET with_parts = a.with_parts,
amc_validity_upto = a.amc_validity_upto
FROM (SELECT CASE
WHEN count(*) > 0 THEN (SELECT DISTINCT ON (machine_id) with_parts, amc_validity_upto, machine_id
FROM amc_amcdetail