标签: coalesce

为什么在sql语句中使用COALESCE()?

我正在重构一些旧代码并偶然发现了这个命名查询(它在 mysql 之上使用 hibernate):

delete F from
    foo F
inner join user DU on F.user_id = DU.id
where
(COALESCE(:userAlternateId,null) is null or DU.alternate_id like :userAlternateId )
    and ( COALESCE(:fooId,null) is null or F.foo_id like :fooId )
    and (
        ( COALESCE(:fromUpdated,null) is null or F.updated_at>=:fromUpdated )
        and ( COALESCE(:toUpdated,null) is null or F.updated_at<=:toUpdated )
)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么COALESCE要以这种方式使用它: COALESCE(:userAlternateId,null) is null

这是性能黑客还是它使查询数据库独立还是......?

顺便说一句userAlternateId,是字符串/varchar,其他 id 是长整型和from-to日期

mysql sql coalesce

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

优化 max() 聚合,该聚合也适用于“无行”

我有一个正在尝试针对 PostgreSQL 9.2 进行优化的查询:

select coalesce(max(id),0) as m from tbl
Run Code Online (Sandbox Code Playgroud)

它需要永远运行,所以我想我可以将其重写为

select id from tbl order by id desc limit 1
Run Code Online (Sandbox Code Playgroud)

0但如果表中没有行则需要返回。我尝试了几种 case 语句的组合,但它们似乎不起作用。有什么建议么?

计划空表:

Aggregate (cost=11.25..11.26 rows=1 width=4)
 -> Seq Scan on tbl (cost=0.00..11.00 rows=100 width=4)
Run Code Online (Sandbox Code Playgroud)

具有 1,190,000 行的表的成本为 58k,但执行计划相同。

postgresql coalesce aggregate-functions postgresql-9.2 postgresql-performance

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

MySQL group by 与 rollup、coalesce/ifnull 和日期函数

我遇到了 MySQL 的 ROLLUP 和处理结果 NULL 的问题。IFNULL/COALESCE 函数适用于普通列,但在与日期函数一起使用时似乎会崩溃。示例如下:

SELECT
    YEAR(date_time) AS Year,
    count(x) AS Count
FROM mytable
GROUP BY year WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

回报(如预期)

Year Count
---- -----
2015 3
2016 2
NULL 5
Run Code Online (Sandbox Code Playgroud)

当我查询非日期列(例如 varchar)时,我可以使用 IFNULL 或 COALESCE 函数将 NULL 值替换为字符串来处理 NULL 值。但是,当我将相同的逻辑应用于上述查询时,它似乎不起作用。

SELECT
    COALESCE(YEAR(date_time), 'moo') AS Year,
    count(x) AS Count
FROM mytable
GROUP BY year WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

或者

SELECT
    IFNULL(YEAR(date_time), 'moo') AS 'year',
    count(x) AS Count
FROM mytable
GROUP BY year WITH ROLLUP
Run Code Online (Sandbox Code Playgroud)

回报

Year Count
---- -----
2015 …
Run Code Online (Sandbox Code Playgroud)

mysql rollup date coalesce

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

如何从 MySQL 中的比较和空检查指定 ORDER BY?

我有两个表 feed_old(默认数据)和 feed_new(新数据),其中 cron 作业将每天运行,并仅使用当前信息更新 feed_new 表

定时任务

$url = "localhost/test.xml";
$xml = simplexml_load_file($url);

$this->db->query("TRUNCATE TABLE feed_new");

$date = date('Y-m-d H:i:s');

foreach($xml->Product as $item)
{
  $data = array(
    'product_code'    => $item->ProductCode,
    'name'            => $item->Name,
    'price'           => $item->RetailCurrentPrice,
    'stock'           => (int)$item->Stock,
    'manufacture'           => '1',
    'date_updated'      => $date
  );

  $update_status = $this->model_price->check_price($data);
}
Run Code Online (Sandbox Code Playgroud)

模型

public function check_price($data)
{
  if($data) {
    $insert = $this->db->insert('feed_new', $data);
    return ($insert == true) ? true : false;
  }
}
Run Code Online (Sandbox Code Playgroud)

从这里开始一切正常

当我比较 feed_new 与 feed_old 并获得任何更改并显示所有记录时,问题就来了

在比较 feed_new …

mysql sql select coalesce sql-order-by

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

如何在 R 中执行列的滚动合并

我有一个像这样的数据框:

stage1 stage2 stage3 stage4
a        NA     b      c
NA       d      NA     e
NA       NA     f      g
NA       NA     NA     h
Run Code Online (Sandbox Code Playgroud)

其中每一列都是流程的一个阶段。我想要做的是根据前面的列合并每一列:

stage1 stage2 stage3 stage4 
a        a      a      a
NA       d      d      d
NA       NA     f      f
NA       NA     NA     h
Run Code Online (Sandbox Code Playgroud)

实际值并不重要,这也可能是一个逻辑数据帧,其中输出的每个字符串是TRUE,每个 NA 是FALSE

我编写了这个函数,可以让我合并选择的列:

coacross <- function(...) {
  coalesce(!!!across(...))
}

df <- df %>%
  mutate(total_stages = coacross(everything()))
Run Code Online (Sandbox Code Playgroud)

这基本上创建了stage4我想要的输出列。有什么方法可以迭代运行这个,最好没有 for 循环?stage2那么我可以对和做同样的事情stage3吗?否则,还有其他方法可以做到这一点吗?

多谢。

编辑:

这有效:

for(col in names(df %>% select(-stage1))){ …
Run Code Online (Sandbox Code Playgroud)

r coalesce dplyr

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

计算栏(COALESCE vs CASE vs ISNULL)

我不久前发布了类似的问题,现在我需要更新此代码,我回来问一个后续问题.上一个问题在这里:
基于可空列的计算列

我的数据(Address1, Address2, City, State, Zip, Country)可能包含不完整的信息.即我不能保证除了StateCountry列之外的任何东西都有数据.

我想有一个计算列FullAddress.

以前,我使用过COALESCE,如果填写了所有字段,那么效果很好.现在,随着数据要求的放宽,这已不再是一个选项(因为我们以重复的逗号结尾FullAddress).这是我以前使用的(注意,我只是在这里使用SELECT语句以方便使用 - 一旦我有适用于所有情况的东西,将转换为计算列"alter table add"语句):

SELECT (((((COALESCE([Address1],'')
    + COALESCE(', '+[Address2],''))
    + COALESCE(', '+[City],''))
    + COALESCE(', '+[State],''))
    + COALESCE(', '+[Zip],''))
    + COALESCE(', '+[Country],'')) AS FullAddress
FROM Locations
Run Code Online (Sandbox Code Playgroud)

现在,我已经使用了一个替代方法CASE,但它仍然不适用于边缘情况Address1 is NULL(问题是FullAddress它将具有','作为前两个字符)

SELECT CASE WHEN [Address1] IS NOT NULL THEN [Address1] ELSE '' END
        + CASE WHEN [Address2] IS NOT NULL THEN ', ' …
Run Code Online (Sandbox Code Playgroud)

sql sql-server case coalesce calculated-columns

4
推荐指数
1
解决办法
3300
查看次数

jQuery多选择器命令

我想选择多个按钮并按顺序点击第一个按钮.像COALESCE功能一样的东西.

我试过这个:

$(".selector1, .selector2, .selector3").first().click();
Run Code Online (Sandbox Code Playgroud)

这可以工作,但选择遵循DOM顺序而不是我的选择器查询顺序.有什么建议吗?

jquery coalesce selector

4
推荐指数
1
解决办法
1871
查看次数

ANSI等价的IS NULL

我试图找到ANSI方式来编写T-SQL"IS NULL".(更正,是'IN NULL')互联网上的一些帖子说你可以使用coalesce让它像'IS NULL'一样工作

我喜欢这样做的原因:便携式代码.并且查询必须返回行NULL.

到目前为止我创建了这个:

SELECT empid,
       firstname,
       lastname,
       country,
       coalesce(region,'unknown') AS regions ,
       city
FROM HR.Employees
Run Code Online (Sandbox Code Playgroud)

结果集如下所示:

empid   firstname           lastname       country  regions city
1           Sara            Davis           USA     WA      Seattle
2           Don             Funk            USA     WA      Tacoma
3           Judy            Lew             USA     WA      Kirkland 
4           Yael            Peled           USA     WA      Redmond
5           Sven            Buck            UK      unknown London
6           Paul            Suurs           UK      unknown London
7           Russell         King            UK      unknown London
8           Maria           Cameron         USA     WA      Seattle
9           Zoya            Dolgopyatova    UK      unknown …
Run Code Online (Sandbox Code Playgroud)

sql coalesce isnull ansi-sql

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

如果MySQL中返回的结果为NULL,请选择默认值

以下查询运行正常,但我想输入一个选项,如果返回的电子邮件是NULL,那么我输入"example@google.com"或类似的东西.我已经阅读了一些函数,比如说COALESCE(EMAIL,"example@google.com"),但我不确定该函数在脚本中的位置.你能指点一下我应该在哪里注入这个功能吗?我是否正朝着正确的方向前进?谢谢.

SELECT LCASE(LOGIN_NAME) as uniqueid, CONCAT('sha-512:', PASSWD) as password, REPLACE(CONTACT_NAME, '"', '') as name, \
     CONCAT('unit,', \
       MAX(CASE WHEN USER_TYPE = 'custom' THEN  \
          'location_employee'  \
        WHEN (LOGIN_NAME != 'link' AND USER_TYPE = 'owner' AND (UA.PARTY_SITE_ID IS NULL OR NOT EXISTS (SELECT U2.ID FROM CUSTOMER_DATA.USER_ACCESS U2 WHERE U2.USER_ID=U.ID AND (U2.PARTY_SITE_ID IS NULL OR U2.PARTY_SITE_ID = '')) ) )THEN  \
          'master'  \
        ELSE  \
          'location'  \
        END)) AS role, \
     MAX(EMAIL) as email, \
     MAX(PHONE) as phone, \
     MAX(FAX) …
Run Code Online (Sandbox Code Playgroud)

mysql sql coalesce

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

联合查询在一列上不同

我希望第二个查询的结果覆盖第一个查询的结果:

SELECT "panel_restaurants_restaurant"."id",
       "panel_restaurants_restaurant"."name",
       "panel_restaurants_restaurant"."logo",
       "panel_restaurants_restaurantfeatures"."currency" AS "currency",
       ST_DistanceSphere(location, ST_GeomFromText('POINT(0.0 0.0)',4326)) AS "distance",
       "panel_meals_meal"."id" AS "meal_id",
       "panel_meals_meal"."status" AS "meal_status",
       "panel_meals_meal"."available_count" AS "available_dishes",
       "panel_meals_meal"."discount_price" AS "discount_price",
       "panel_meals_meal"."normal_price" AS "normal_price",
       "panel_meals_meal"."collection_from" AS "pickup_from",
       "panel_meals_meal"."collection_to" AS "pickup_to",
       "panel_meals_meal"."description" AS "meal_description"
FROM "panel_restaurants_restaurant"
INNER JOIN "panel_restaurants_restaurantfeatures" ON (
    "panel_restaurants_restaurantfeatures"."restaurant_id" = "panel_restaurants_restaurant"."id")
LEFT OUTER JOIN "panel_meals_meal" ON ("panel_restaurants_restaurant"."id" = "panel_meals_meal"."restaurant_id"
                AND "panel_meals_meal"."status" = 0
                AND (
                ("panel_meals_meal"."collection_from" AT TIME ZONE 'Europe/Warsaw')::date = DATE 'today' OR
                ("panel_meals_meal"."collection_from" AT TIME ZONE 'Europe/Warsaw')::date = DATE 'tomorrow'
                )
                AND …
Run Code Online (Sandbox Code Playgroud)

sql postgresql union join coalesce

4
推荐指数
1
解决办法
4241
查看次数