当前位置: 首页 > 知识库问答 >
问题:

PostgreSQL-无法识别json类型的等号操作符

周翰
2023-03-14

我有以下疑问:

SELECT 
  distinct(date(survey_results.created_at)), 
  json_build_object(
    'high', 
    ROUND( 
      COUNT(*) FILTER (WHERE ( scores#>>'{medic,categories,motivation}' in('high', 'medium'))) OVER(order by date(survey_results.created_at) ) * 1.0 / 
      (
        CASE (COUNT(*) FILTER (WHERE (scores#>>'{medic,categories,motivation}' in('high','medium','low'))) OVER(order by date(survey_results.created_at))) 
        WHEN 0.0 THEN 1.0 
        ELSE (COUNT(*) FILTER (WHERE (scores#>>'{medic,categories,motivation}' in('high','medium','low'))) OVER(order by date(survey_results.created_at))) 
        END)* 100, 2 ) ) AS childcare FROM survey_results GROUP BY date, scores ORDER BY date asc; 

问题是使用不同(date(survey_results.created_at))。就地查询返回错误:

无法识别json类型的等号操作符

下面是db fiddle,它表明了这个问题:

https://www.db-fiddle.com/f/vUBjUyKDUNLWzySHKCKcXA/1

我怎样才能解决这个问题?

共有3个答案

唐煜
2023-03-14

迁移到使用JSONB,您就不会有这个问题。

这是几年前Postgres 9.4发布时遵循的标准建议。下面是Ruby on Rails社区中的一个线程,它描述了迁移到JSONB作为解决方案。

以下是线程:https://github.com/rails/rails/issues/17706

司空瑾瑜
2023-03-14

问题在于使用distinct(date(survey\u results.created\u at))

不是。问题在于使用DISTINCT,因为它不是一个函数。它始终适用于结果的所有列distinct(a),b与distinct a,(b)或distinct a,b相同。正因为如此,distinct尝试比较第二列的相同值,第二列是json类型的,不能与=

如果您只需要“latest”值,可以使用Postgres的distinct on()运算符:

SELECT distinct on (date(survey_results.created_at)) 
       date(survey_results.created_at) as date,
       json_build_object('high', 
        ROUND( 
      COUNT(*) FILTER (WHERE ( scores#>>'{medic,categories,motivation}' in('high', 'medium'))) OVER(order by date(survey_results.created_at) ) * 1.0 / 
      (
        CASE (COUNT(*) FILTER (WHERE (scores#>>'{medic,categories,motivation}' in('high','medium','low'))) OVER(order by date(survey_results.created_at))) 
        WHEN 0.0 THEN 1.0 
        ELSE (COUNT(*) FILTER (WHERE (scores#>>'{medic,categories,motivation}' in('high','medium','low'))) OVER(order by date(survey_results.created_at))) 
        END)* 100, 2 ) ) AS childcare 
FROM survey_results 
GROUP BY date, scores 
ORDER BY date asc; 

order by组合的不同on()ON()部分中指定的列的后续相同值选择第一行。在这种情况下,它将返回最早的日期。如果您想要“最新”行,请将排序顺序更改为desc

https://www.db-fiddle.com/f/vUBjUyKDUNLWzySHKCKcXA/1

越勇
2023-03-14

使用jsonb_build_object。请注意json之后的二进制文件的b

 类似资料:
  • 看看这张图: 我认为缺少一些设置配置,因为当我尝试创建模型时。py会这样。代码无法识别,文件与py文件不同。。。 知道我做错了什么吗? 注意:不是文件类型问题,因为可以识别另一个文件代码并且文件图标是python。

  • 编程新手,刚刚开始使用Java。我拿不到那张票要使用字符的操作数。这与while循环有关。即使放置了正确的输入。循环不断地说,这是一个无效的输入,尽管正确的输入被放置。 输入被正确识别并转换为大写。但是同时循环不起作用。任何建议将不胜感激!

  • 用例:用户需要能够拖动 问题是:我的代码不能抵抗来自其他来源的拖放(例如,将jpeg从IE拖到表单上会触发相同的事件)。这是因为我无法确定拖动的项目是否是Outlook对象,或者拖动的项目来自哪个源。 是否有一种变通方法,使我只能接受特定类型的拖放项?以下是我在DragDrop事件处理程序中的代码: 从Outlook拖动时DragEventArgs对象(e)的一些详细信息:

  • 问题内容: 尝试将类类型的对象添加到 JArray时 遇到以下错误。 这是我正在使用的代码: 在运行程序时,我将其命名如下: 如何转换 _JArray(JArray) 内的 AmountModel(类) 以被系统识别为JSON对象? 非常感谢您的回答。 谢谢。 问题答案: 为了将任意非原始POCO添加到中,您必须使用以下重载之一显式序列化它: (另请注意,我已更正了循环中的结束条件。它是,导致出现

  • 这是我正在使用的图书馆。但我需要更改java代码的样式。但是由于它是一个外部依赖项,所以文件是只读的。 这是我的Android文件结构: Android文件结构截图 这是我的build.gradle(模块:App)的依赖项块代码: code bloack的屏幕截图 在我的share.java文件中,我尝试导入CarouselPicker,这是我为alt+enter得到的结果: Alt+Enter给

  • 当我尝试在Pandas的applymap函数中使用参数“na_action”时,我得到了以下错误: TypeError:applymap()获得意外的关键字参数“na_action” 例子: 类型错误。回溯(最近一次呼叫最后一次) 在1个显示器中显示(df\U复制) 2个df。iloc[0,0]=pd。NA ---- TypeError:applymap()获得意外的关键字参数“na_action