标签: correlated-subquery

在postgresql中的子查询中使用外部查询结果

我有两张桌子points,contacts而且我试图points.score按月分组每个联系人的平均值. 请注意,积分和联系人不相关,我只想要在一个月内创建的积分总和除以该月份存在的联系人数量.

所以,我需要总结按created_at月份分组的点数,我需要只计算那个月份的联系人数量.这是最后一部分让我烦恼的部分.我不确定如何在子查询中使用外部查询中的列.我试过这样的事情:

SELECT SUM(score) AS points_sum,
  EXTRACT(month FROM created_at) AS month,
  date_trunc('MONTH', created_at) + INTERVAL '1 month' AS next_month,
  (SELECT COUNT(id) FROM contacts WHERE contacts.created_at <= next_month) as contact_count
FROM points
GROUP BY month, next_month
ORDER BY month
Run Code Online (Sandbox Code Playgroud)

所以,我正在提取我的积分总和的实际月份,同时,得到next_month的开头,这样我就可以说"让我知道他们创建的联系人的数量是<next_month"

但它抱怨说column next_month doesn't exist 这是可以理解的,因为子查询对外部查询一无所知.资格赛points.next_month也不起作用.

那么有人能指出我如何实现这一目标的正确方向吗?

表:

score | created_at
10    | "2011-11-15 21:44:00.363423"
11    | "2011-10-15 21:44:00.69667" 
12    | "2011-09-15 21:44:00.773289"
13    | "2011-08-15 21:44:00.848838"
14    | "2011-07-15 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql correlated-subquery

7
推荐指数
1
解决办法
9167
查看次数

SQL Server:pivot功能,需要透视表

我在SQL Server中有以下格式的数据.

-ID          ID2  status  time
-1384904453  417  stop    2013-11-19 23:40:43.000
-1384900211  417  start   2013-11-19 22:30:06.000
-1384822614  417  stop    2013-11-19 00:56:36.000
-1384813810  417  start   2013-11-18 22:30:06.000
-1384561199  417  stop    2013-11-16 00:19:45.000
-1384554623  417  start   2013-11-15 22:30:06.000
-1384475231  417  stop    2013-11-15 00:26:58.000
-1384468224  417  start   2013-11-14 22:30:06.000
-1384388181  417  stop    2013-11-14 00:16:20.000
-1384381807  417  start   2013-11-13 22:30:06.000
-1384300222  417  stop    2013-11-12 23:50:11.000
-1384295414  417  start   2013-11-12 22:30:06.000
-1384218209  417  stop    2013-11-12 01:03:17.000
-1384209015  417  start   2013-11-11 22:30:06.000
Run Code Online (Sandbox Code Playgroud)

我需要的是能够以下列格式显示数据.

-ID2  start                      stop …
Run Code Online (Sandbox Code Playgroud)

sql sql-server pivot subquery correlated-subquery

7
推荐指数
2
解决办法
270
查看次数

删除具有4200万行的表的相关子查询的SQL?

我有一张cats42,795,120行的表.

显然这是很多行.所以当我这样做时:

/* owner_cats is a many-to-many join table */
DELETE FROM cats
WHERE cats.id_cat IN (
SELECT owner_cats.id_cat FROM owner_cats
WHERE owner_cats.id_owner = 1)
Run Code Online (Sandbox Code Playgroud)

查询超时:(

(编辑:我需要增加我的 CommandTimeout 值,默认只有30秒)

我不能用,TRUNCATE TABLE cats因为我不想吹掉其他主人的猫.

我正在使用SQL Server 2005,其中"恢复模式"设置为"简单".

所以,我想做这样的事情(从应用程序btw执行这个SQL):

DELETE TOP (25) PERCENT FROM cats
WHERE cats.id_cat IN (
SELECT owner_cats.id_cat FROM owner_cats
WHERE owner_cats.id_owner = 1)

DELETE TOP(50) PERCENT FROM cats
WHERE cats.id_cat IN (
SELECT owner_cats.id_cat FROM owner_cats
WHERE owner_cats.id_owner = 1)

DELETE FROM cats
WHERE cats.id_cat …
Run Code Online (Sandbox Code Playgroud)

sql sql-server correlated-subquery sql-delete

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

NHibernate QueryOver选择实体和聚合

我想要做的是显示一个简单的数据网格,其中包含实体数据及其子项的聚合数据.例如,我们使用订单和订单项.我想显示订单信息和订单项的数量.

OrderID,OrderDate,NumOfLineItems

现在通常在SQL中,您可以通过多种方式完成.但这是我能想到的唯一可以在翻译成NHibernate时使用的方法.

SELECT o.OrderID, OrderDate, NumOfLineItems
FROM #Orders o
INNER JOIN
(SELECT o2.OrderID, COUNT(*) As NumOfLineItems FROM #LineItems l
INNER JOIN #Orders o2 ON o2.OrderID = l.OrderID
WHERE UserID = 1 GROUP BY o2.OrderID) t1 ON o.OrderID = t1.OrderID
WHERE UserID = 1
Run Code Online (Sandbox Code Playgroud)

我知道还有其他方法,但我正在考虑NHibernate允许我使用QueryOver语法的方式.我不想使用派生列.我试图避免编写SQL.

对于我的实体,我有一个Order实体和一个AggregatedOrder实体,在这种情况下它将是我的DTO,我计划使用变换器aliastobean将数据复制到其中.

我完全不知道如何解决这个问题.

到目前为止我所有的一切:

        QueryOver<LineItem> x = QueryOver.Of<LineItem>()
            .SelectList(p => p .SelectCount(l => l.Id).WithAlias(() => itemAlias.NumOfLineItems))
            .JoinQueryOver<Order>(l => l.Order)
            .Where(o => o.UserID == userID)


        var y = session.QueryOver<Listing>()
            .JoinQueryOver<Bid>(x); // no idea whats going on here
Run Code Online (Sandbox Code Playgroud)

nhibernate aggregate correlated-subquery queryover

6
推荐指数
1
解决办法
3783
查看次数

使用单个SQL相关子查询来获取两列

我的问题由以下查询表示:

SELECT 
  b.row_id, b.x, b.y, b.something,
  (SELECT a.x FROM my_table a WHERE a.row_id = (b.row_id - 1), a.something != 42 ) AS source_x,
  (SELECT a.y FROM my_table a WHERE a.row_id = (b.row_id - 1), a.something != 42 ) AS source_y
FROM 
  my_table b
Run Code Online (Sandbox Code Playgroud)

我使用相同的子查询语句两次,以获得两者source_xsource_y.这就是为什么我想知道是否可以只使用一个子查询来做到这一点?

因为一旦我对我的真实数据(数百万行)运行此查询,它似乎永远不会完成并花费数小时,如果不是几天(我的连接在结束前挂起).

我正在使用PostgreSQL 8.4

sql postgresql indexing performance correlated-subquery

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

“存在”相关子查询中递归 CTE 的替代方案?

我遇到一种情况,我需要能够查看给定的人是否在用户/经理层次结构中。

我需要能够根据一组规则为一组用户执行此操作(不用担心这一点,只是为了给它一些背景信息)

理想情况下,我想在 where 子句的相关存在子查询中使用递归 CTE。

但这会带来很多问题..

  1. 我认为您根本不能在子查询中使用 CTE。
  2. 我使用兼容模式 80 的 SQL 2005 - 所以我不能使用交叉应用...所以对我来说 UDF 中没有列参数:-(

我想我想做的是:

WITH UserHierarchy(UserId, ManagerId)
    AS
    (
        --Anchor Definition
        SELECT [UserId], [ManagerId] FROM [Users] WHERE [ManagerId] = [Rules].[RuleAddedByUserId] -- this needs to bind to an outer query....
        UNION ALL
        --Recursive Member definiation
        SELECT [Users].[UserId], [Users].[ManagerId] FROM [Users] 
        INNER JOIN [UserHierarchy] ON [Users].[ManagerId] = [UserHierarchy].[UserId]
        WHERE [Users].[UserId] <> [Users].[ManagerId] --don't recurse if the anchor definition matches itself (to avoid an infinate loop).
    )
Run Code Online (Sandbox Code Playgroud)

无论如何,是否可以在兼容模式 …

sql recursion sql-server-2005 common-table-expression correlated-subquery

6
推荐指数
1
解决办法
5384
查看次数

使用SQL比较两个表中的标识符计数

我正在尝试构建一个查询,比较两个具有相同结构的表

Table 1:
ID | Data 

Table 2:
ID | Data
Run Code Online (Sandbox Code Playgroud)

ID是一个非唯一键(数据是可重复的,但ID |数据组合是唯一的).我需要一个ID列表,其中表2中这些ID的COUNT大于表1中的ID.

例如,如果

Table 1
a | data
a | data1    
b | data2

Table 2
a | data
a | data1
b | data2
b | data3
Run Code Online (Sandbox Code Playgroud)

会产生输出"b"

这感觉应该很容易,但我的脑袋现在已经乱了.如果影响选项,我在mysql中这样做.

mysql sql subquery correlated-subquery

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

子查询中的SqlAlchemy闭包

我搜索了很多主题并没有找到答案,或者问题太复杂了.好吧 这是我的第一个问题.这是SQL

SELECT  parent.*,
(
    SELECT  COUNT(*)
    FROM    child
    WHERE   parent.id = child.parent_id
)
FROM parent
Run Code Online (Sandbox Code Playgroud)

如何在sqlalchemy中执行此子句?

WHERE   ui.invited_by = u.id
Run Code Online (Sandbox Code Playgroud)

可以在收藏中复制吗?sql表达式?PS我知道它可以通过group_by来完成.但我需要通过子查询.

谢谢.

closures sqlalchemy subquery correlated-subquery

5
推荐指数
1
解决办法
1590
查看次数

JPA Criteria选择其组中具有最大值的所有实例

有没有办法用JPA 2编写CriteriaBuilder相当于以下查询?

select * from season s1
where end = (
    select max(end)
    from season s2
    where s1.contest_id=s2.contest_id
);
Run Code Online (Sandbox Code Playgroud)

在JPQL中,此查询是:

Select s1 from Season s1 
where s1.end = (
    select max(s2.end)
    from Season s2
    where s1.contest=s2.contest
)
Run Code Online (Sandbox Code Playgroud)

jpa criteria-api correlated-subquery jpa-2.0

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

在Postgres中为比赛存储'等级'

我正在尝试确定以下查询是否存在"低成本"优化.我们已经实施了一个系统,"门票"可以获得"积分",因此可以进行排名.为了支持分析类型的查询,我们将每个票证的等级(票证可以绑定)与票证一起存储.

我发现,在规模上,更新此排名非常缓慢.我试图在一组大约20k门票的"门票"上运行下面的场景.

我希望有人可以帮助确定原因并提供一些帮助.

我们在postgres 9.3.6

这是一个简化的票证表架构:

ogs_1=> \d api_ticket
                                             Table "public.api_ticket"
            Column            |           Type           |                        Modifiers                        
------------------------------+--------------------------+---------------------------------------------------------
 id                           | integer                  | not null default nextval('api_ticket_id_seq'::regclass)
 status                       | character varying(3)     | not null
 points_earned                | integer                  | not null
 rank                         | integer                  | not null
 event_id                     | integer                  | not null
 user_id                      | integer                  | not null
Indexes:
    "api_ticket_pkey" PRIMARY KEY, btree (id)
    "api_ticket_4437cfac" btree (event_id)
    "api_ticket_e8701ad4" btree (user_id)
    "api_ticket_points_earned_idx" btree (points_earned)
    "api_ticket_rank_idx" btree ("rank")
Foreign-key constraints:
    "api_ticket_event_id_598c97289edc0e3e_fk_api_event_id" FOREIGN KEY (event_id) …
Run Code Online (Sandbox Code Playgroud)

sql postgresql correlated-subquery sql-update postgresql-performance

5
推荐指数
1
解决办法
243
查看次数