标签: group-by

选择 json_agg 中的列

我有一个查询,如:

SELECT a.id, a.name, json_agg(b.*) as "item"
  FROM a
  JOIN b ON b.item_id = a.id
 GROUP BY a.id, a.name;
Run Code Online (Sandbox Code Playgroud)

如何选择在列b,所以我没有b.item_id在JSON对象?

我读过关于ROW,但它返回一个 JSON 对象,如:

{"f1": "Foo", "f2": "Bar"}
Run Code Online (Sandbox Code Playgroud)

一旦获取它以匹配正确的列键,我将需要重新映射 JSON 对象。我想避免这种情况并保留原始列名。

postgresql group-by row json

41
推荐指数
4
解决办法
10万
查看次数

为什么我们在 SQL 查询中使用 Group by 1 和 Group by 1,2,3?

在 SQL 查询中,我们确实使用 Group by 子句来应用聚合函数。

  • 但是在 Group by 子句中使用数值而不是列名的目的是什么?例如:按 1 分组。

mysql syntax plsql group-by

36
推荐指数
3
解决办法
9万
查看次数

为什么 GROUP BY 语句中的通配符不起作用?

我正在尝试使以下 SQL 语句起作用,但出现语法错误:

SELECT A.*, COUNT(B.foo)
FROM TABLE1 A
LEFT JOIN TABLE2 B ON A.PKey = B.FKey
GROUP BY A.*
Run Code Online (Sandbox Code Playgroud)

这里,A 是一个有 40 列的宽表,如果可能,我想避免在 GROUP BY 子句中列出每个列名。我有很多这样的表,我必须在这些表上运行类似的查询,所以我必须编写一个存储过程。解决这个问题的最佳方法是什么?

我正在使用 MS SQL Server 2008。

sql-server-2008 sql-server t-sql group-by

31
推荐指数
2
解决办法
2万
查看次数

在大型 PostgresSQL 表中提高 COUNT/GROUP-BY 的性能?

我正在运行 PostgresSQL 9.2 并且有一个 12 列的关系,大约有 6,700,000 行。它包含 3D 空间中的节点,每个节点都引用一个用户(创建它的人)。要查询哪个用户创建了多少个节点,我执行以下操作(添加explain analyze以获取更多信息):

EXPLAIN ANALYZE SELECT user_id, count(user_id) FROM treenode WHERE project_id=1 GROUP BY user_id;
                                                    QUERY PLAN                                                         
---------------------------------------------------------------------------------------------------------------------------
 HashAggregate  (cost=253668.70..253669.07 rows=37 width=8) (actual time=1747.620..1747.623 rows=38 loops=1)
   ->  Seq Scan on treenode  (cost=0.00..220278.79 rows=6677983 width=8) (actual time=0.019..886.803 rows=6677983 loops=1)
         Filter: (project_id = 1)
 Total runtime: 1747.653 ms
Run Code Online (Sandbox Code Playgroud)

如您所见,这大约需要 1.7 秒。考虑到数据量,这还算不错,但我想知道这是否可以改进。我尝试在用户列上添加 BTree 索引,但这没有任何帮助。

您有其他建议吗?


为了完整起见,这是完整的表定义及其所有索引(没有外键约束、引用和触发器):

    Column     |           Type           |                      Modifiers                    
---------------+--------------------------+------------------------------------------------------
 id            | bigint                   | not null default nextval('concept_id_seq'::regclass)
 user_id       | bigint …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index count group-by

28
推荐指数
2
解决办法
6万
查看次数

使用子查询时 Postgres 错误 [列必须出现在 GROUP BY 子句中或用于聚合函数中]

我有两张桌子employeephones. 一个员工可以有 0 到 n 个电话号码。我想列出员工姓名及其电话号码。我正在使用以下运行良好的查询。

SELECT empname,array_agg(phonenumber) AS phonenumbers 
FROM employee LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

员工表可能包含大量行。我想一次只取一些员工。例如,我想用他们的电话号码获取 3 名员工。我正在尝试运行此查询。

SELECT empname,array_agg(phonenumber) AS phonenumbers 
FROM 
(SELECT * FROM employee ORDER BY empname LIMIT 3 OFFSET 0) AS employee 
LEFT OUTER JOIN phones ON employee.empid = phones.empid
GROUP BY employee.empid
Run Code Online (Sandbox Code Playgroud)

但我收到这个错误。ERROR: column "employee.empname" must appear in the GROUP BY clause or be used in an aggregate function 两个查询之间的唯一区别是我在后者中使用子查询来限制加入之前的行。我该如何解决这个错误?

postgresql aggregate subquery group-by

25
推荐指数
1
解决办法
12万
查看次数

计算一行中两列或更多列超过某个值的位置 [篮球、双双、三双]

我玩了一场篮球比赛,它允许将其统计数据输出为数据库文件,因此可以从中计算出游戏中未实现的统计数据。到目前为止,我在计算我想要的统计数据时没有遇到任何问题,但现在我遇到了一个问题:从他的比赛统计数据中计算一个球员在整个赛季中取得的双打和/或三双的数量。

双双和三双的定义如下:

双双:

两双是指球员在一场比赛中在五个统计类别中的两个类别(得分、篮板、助攻、抢断和盖帽)中累积达到两位数的总和的表现。

三双:

三双被定义为球员在一场比赛中在五个统计类别中的三个——得分、篮板、助攻、抢断和盖帽——中累计达到两位数的表现。

四双(添加澄清)

四双被定义为球员在一场比赛中在五个统计类别中的四个类别(得分、篮板、助攻、抢断和盖帽)中累计达到两位数的表现。

“PlayerGameStats”表存储玩家玩的每个游戏的统计数据,如下所示:

CREATE TABLE PlayerGameStats AS SELECT * FROM ( VALUES
  ( 1, 1,  1, 'Nuggets',    'Cavaliers',  6,  8,  2, 2,  0 ),
  ( 2, 1,  2, 'Nuggets',     'Clippers', 15,  7,  0, 1,  3 ),
  ( 3, 1,  6, 'Nuggets', 'Trailblazers', 11, 11,  1, 2,  1 ),
  ( 4, 1, 10, 'Nuggets',    'Mavericks',  8, 10,  2, 2, 12 ),
  ( 5, 1, 11, 'Nuggets',       'Knicks', 23, 12,  1, 0,  0 ),
  ( …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql count group-by

20
推荐指数
4
解决办法
4642
查看次数

如何选择多列但只能按一分组?

我有一个问题group by,我想选择多列但只按一列分组。下面的查询是我尝试过的,但它给了我一个错误。

SELECT Rls.RoleName,Pro.[FirstName],Pro.[LastName],Count(UR.[RoleId]) as [Count]
from [b.website-sitecore-core].[dbo].[aspnet_UsersInRoles] UR
inner join [b.website-professional-au].[dbo].[Profile]  Pro
on UR.UserId = Pro.Id
inner join [b.website-sitecore-core].[dbo].[aspnet_Roles] Rls
on Rls.RoleId = UR.RoleId
inner join [b.website-professional-au].[dbo].[Gender] Gn
on gn.Id = pro.GenderId
GROUP BY Rls.RoleName;
Run Code Online (Sandbox Code Playgroud)

sql-server group-by

20
推荐指数
1
解决办法
17万
查看次数

如何获得计数为零的组?

我将尝试从我的 SQL 服务器数据库中的数据制作一个图表。即使计数为零,我也会拥有所有街道以及居住在这条街道上的用户的计数。

为此,我试过这个查询:

Create table Streets(
  ID int IDENTITY  primary key,
  Name varchar(100)
);

create table users(
  ID int IDENTITY  primary key,
  Username varchar(100),
  StreetID int references Streets(id)
);

insert into streets values ('1st street'), ('2nd street'), ('3rd street'), 
                           ('4th street'), ('5th street');
insert into users values ('Pol', 1), ('Doortje', 1), ('Marc', 2), ('Bieke', 2), 
                         ('Paulien', 2), ('Fernand', 2), ('Pascal', 2), ('Boma', 3), 
                         ('Goedele', 3), ('Xavier', 4);

select s.name as street, count(s.name) as count 
from users u inner join …
Run Code Online (Sandbox Code Playgroud)

join sql-server group-by

20
推荐指数
3
解决办法
11万
查看次数

从表中查找“n”个连续的空闲数字

我有一些这样的数字表(状态是免费的或分配的)

id_set 号码状态         
-----------------------
1 000001 已分配
1 000002 免费
1 000003 已分配
1 000004 免费
1 000005 免费
1 000006 已分配
1 000007 已分配
1 000008 免费
1 000009 免费
1 000010 免费
1 000011 已分配
1 000012 已分配
1 000013 已分配
1 000014 免费
1 000015 已分配

我需要找到“n”个连续数字,因此对于 n = 3,查询将返回

1 000008 免费
1 000009 免费
1 000010 免费

它应该只返回每个 id_set 的第一个可能的组(实际上,它只会为每个查询的 id_set 执行)

我正在检查 WINDOW 函数,尝试了一些类似的查询COUNT(id_number) OVER (PARTITION BY id_set ROWS UNBOUNDED PRECEDING),但这就是我得到的:) 我想不出逻辑,如何在 …

postgresql window-functions group-by gaps-and-islands

19
推荐指数
4
解决办法
3万
查看次数

使用 GROUP BY 和 ORDER BY 对大表进行慢速查询

我有一个包含 720 万个元组的表,如下所示:

                               table public.methods
 column |          type         |                      attributes
--------+-----------------------+----------------------------------------------------
 id     | integer               | not null DEFAULT nextval('methodkey'::regclass)
 hash   | character varying(32) | not null
 string | character varying     | not null
 method | character varying     | not null
 file   | character varying     | not null
 type   | character varying     | not null
Indexes:
    "methods_pkey" PRIMARY KEY, btree (id)
    "methodhash" btree (hash)
Run Code Online (Sandbox Code Playgroud)

现在我想选择一些值,但查询速度非常慢:

db=# explain 
    select hash, string, count(method) 
    from methods 
    where hash not in 
          (select hash from nostring) …
Run Code Online (Sandbox Code Playgroud)

postgresql performance index sorting group-by

14
推荐指数
2
解决办法
3万
查看次数