小编sag*_*agi的帖子

PostgreSQL:使用聚合函数更新

我想使用聚合函数更新paneldata设置列的表ibase.

UPDATE paneldata p
SET ibase=SUM(1/i.dist)
FROM ibaselang i
WHERE p.gid=i.gid
AND i.instp<p.period
Run Code Online (Sandbox Code Playgroud)

这导致了 ERROR: aggregate functions are not allowed in UPDATE

表定义

CREATE TABLE public.ibaselang
(
  gid integer,
  dist double precision,
  buildid integer,
  instp smallint
)
WITH (
  OIDS=FALSE
);
Run Code Online (Sandbox Code Playgroud)

解决方法

不幸的是,我不知道如何WHERE在子查询中实现我的函数.

sql postgresql aggregate-functions

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

选择值为NULL的列名

好的,4个小时的编码,只有6个小时的搜索......我并没有比开始时更好.这是我的问题.我有一个表(tmpShell),它有12列.它是一个没有约束的基本表 - 用于临时报告.当我们插入数据时,我必须提取一个ID号(PatientId)和所有列NAMES,其中该PatientId的值为null.

例:

PatientId    Fname    Lname      DOB 
123455       Sam      NULL       NULL
2345455      NULL     Doe        1/1/1980
09172349     John     Jone       NULL

我想要回归的是:

PatientId    ErrorMsg
123455       Lname,DOB
2345455      Fname
09172349     DOB

当然,如果所有列都有值,则errormsg将为null.

我已尝试并失败了大约300个不同的代码片段,但这似乎是我能得到的最接近的代码.不幸的是,这只返回每一列,而不是空值.

     ALTER PROC [sp_aaShowAllNullColumns]
      @tableName VARCHAR(255)
     AS
      BEGIN
            SET NOCOUNT ON;

DECLARE @sql NVARCHAR(4000); DECLARE @cols NVARCHAR(4000); DECLARE @tcols TABLE ( [colbit] NVARCHAR(255) ); --DECLARE @tablename VARCHAR(255) = 'tmpShell'; INSERT @tcols SELECT 'count(' + [columns].[name] + ') as ' + [columns].[name] + ', ' AS [colbit] FROM [sys].[columns] WHERE [columns].[object_id] = OBJECT_ID(@tableName); SELECT @cols = COALESCE(@cols, ', ', '') + …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server null

9
推荐指数
2
解决办法
3136
查看次数

MYSQL案例陈述多个条件

请帮助检查以下sql代码中的错误:

select
case when (z.mso_group_id = '3' and z.model_id = '22887081') then coalesce(level_2_id,996) level_2_id
      when (z.mso_group_id = '4' and z.model_id = '22911859') then coalesce(level_2_id,997) level_2_id
      when (z.mso_group_id = '5' and z.model_id = '22915074') then coalesce(level_2_id,998) level_2_id
      when (z.mso_group_id = '2' and z.model_id = '22908275') then coalesce(level_2_id,999) level_2_id
  end level_2_id
from
database_name
Run Code Online (Sandbox Code Playgroud)

mysql sql database

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

执行计划与预期不符

我遇到了一些奇怪的东西,我无法解释.

我正在使用以下查询:

MERGE INTO Main_Table t
USING  Stg_Table s 
 ON(s.site_id = t.site_id)
 WHEN MATCHED THEN
   UPDATE SET t.arpu_prev_period = s.arpu_prev_period 
              .... --50 more columns  
  where  t.period_code = 201612
Run Code Online (Sandbox Code Playgroud)

Stg_Table:索引(Site_Id)

Main_Table:
- 索引(Period_code,Site_id)
- 由period_code分区
- 注 - 我尝试在Site_Id单独的,相同的执行计划上添加索引.

我期望一个使用单分区扫描的执行计划,但我得到了Partition list all.

这是执行计划:

6   |   0 | MERGE STATEMENT       |                               |
7   |   1 |  MERGE                | Main_Table                    |
8   |   2 |   VIEW                |                               |
9   |   3 |    HASH JOIN          |                               |
10  |   4 …
Run Code Online (Sandbox Code Playgroud)

sql oracle performance sql-execution-plan

8
推荐指数
1
解决办法
96
查看次数

在派生类中使用基类Copy CTOR

我知道这个主题有很多帖子,但我找不到任何完全回答我的问题.

假设我有一个Base类和一个Derived类,我为它实现了CCtor和赋值运算符,如下所示:

class Base {
    char * name;
    ....
    Base(const Base& other) :name(nullptr) { *this = other }
    void operator=(const Base& other) { ... Deep copy of name } 
}


class Derived : public Base {
.... 
    Derived(const Derived& other) { *this = other ; }
    void operator=(const Derived& other) {
        Base::operator=(other);
        .....
    }
Run Code Online (Sandbox Code Playgroud)

现在我对这个设计有一些疑问.

  1. 这是适合这种情况的合适设计吗?
  2. 如果我有一个第三类,在基类和派生类之间,但它只包含原始类型,我在哪里复制它们?EG使用第二类的默认赋值运算符?建立一个新的?只在第三级复制它们?
  3. 我可以类似地在派生类CCtor中调用基类CCtor,而不是赋值运算符.有什么不同?如果我将它们放在两种方法中,它会尝试将值复制两次吗?

编辑:只是为了澄清,设计是我在项目中给出的.我有指针所以我必须使用深层复制.

c++ oop

8
推荐指数
1
解决办法
152
查看次数

如何在SQL中上下找到第一个最接近的值?

我有这样的表:

在此输入图像描述

当我设置id = 4时,我需要的结果是:

在此输入图像描述

请注意,我ID=4从两侧选择了两个最接近的值.

如何编写sql代码呢?

sql sql-server

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

SQL顺序的绝对值

我的下表中有一些数据

table_1
     column_1     column_2
        1           10
        1           20
        1           30
        1           40
        1           50
        2           -10
        2           -20
        2           -30
        2           -40
        2           -50
Run Code Online (Sandbox Code Playgroud)

我想将此结果更改为这样的结果

 column_1     column_2
    1           10
    2           -10
    1           20
    2           -20
    1           30
    2           -30
    1           40
    2           -40
    1           50
    2           -50
Run Code Online (Sandbox Code Playgroud)

我不确定是否有办法使用order by来做到这一点?我想要展示的是我试图将(10,-10)显示为一组数据

sql sql-server sql-server-2012

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

MySQL总和每X行

我需要很少的MySQL帮助.我有一个每小时值的表:

ID | VALUE | HOUR
1  | 1.0   | 01.00
2  | 1.0   | 02.00
...
24 | 1.0   | 24.00
Run Code Online (Sandbox Code Playgroud)

现在我发现有时我得到的数据不是每小时一次,而是每30分钟或有时每15分钟.所以数据看起来像这样:

ID | VALUE | HOUR
1  | 1.0   | 01.00
2  | 1.0   | 01.30
...
48 | 1.0   | 24.00
Run Code Online (Sandbox Code Playgroud)

我需要以小时格式显示数据,所以我很好奇是否有机会告诉MySQL将每两个(30分钟格式)或每四个(15分钟格式)行的结果相加?

mysql sql

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

选择两列范围之间的值

我有这样一张桌子:

i1   i2
----------
1    a
1    b
1    c
1    d
2    x
3    y
4    a
4    b
4    c
Run Code Online (Sandbox Code Playgroud)

我想选择1 c和4 a之间的行.
结果应该是:

1 c
1 d 
2 x 
3 y 
4 a
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

sql sql-server sql-server-2014

5
推荐指数
2
解决办法
1045
查看次数

如何组合一列中的日期和另一列中的时间

目前我正在尝试从两个日期列中选择一个日期时间列。我有以下情况:

  1. FROMDATE 包含没有时间的日期的列,例如 08-01-2017 00:00:00
  2. FROMTIME 包含没有日期的时间的列,例如 01-01-1899 13:50:00

现在我想在一列中选择两者,例如 SELECT (<what ever>) as FROMDATETIME ...

预期结果:08-01-2017 13:50:00

但我无法提取日期和时间部分并将它们作为 datetime.

用一种sql 说:select (date(FROMDATE) + time(FROMTIME)) as FROMDATETIME.

我已经尝试了很多与TO_CHARTO_DATE,但没能得到期望的结果。

sql oracle date

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