婷婷久久综合九色综合,欧美成色婷婷在线观看视频,偷窥视频一区,欧美日本一道道一区二区

<tt id="bu9ss"></tt>
  • <span id="bu9ss"></span>
  • <pre id="bu9ss"><tt id="bu9ss"></tt></pre>
    <label id="bu9ss"></label>

    當(dāng)前位置:首頁 >  站長 >  數(shù)據(jù)庫 >  正文

    PostgreSQL對GROUP BY子句使用常量的特殊限制詳解

     2021-04-25 17:09  來源: 腳本之家   我來投稿 撤稿糾錯

      阿里云優(yōu)惠券 先領(lǐng)券再下單

    一、問題描述

    最近,一個統(tǒng)計程序從Oracle移植到PostgreSQL(版本9.4)時,接連報告錯誤:

    錯誤信息1: postgresql group by position 0 is not in select list.

    錯誤信息2: non-integer constant in GROUP BY.

    產(chǎn)生錯誤的sql類似于:

    insert into sum_tab (IntField1, IntField2, StrField1, StrField2, cnt)
    select IntField, 0, StrField, 'null', count(*) from detail_tab
    where ...
    group by IntField, 0, StrField, 'null';

     

    其中,detail_tab表保存原始的詳細(xì)記錄,而sum_tab保存統(tǒng)計后的記錄信息。

    二、原因分析

    經(jīng)過測試,發(fā)現(xiàn)錯誤是因為PostgreSQL對GROUP BY子句使對使用常量有著特殊限制。測試過程過于繁瑣,這里不再一一寫demo了,直接給出結(jié)論:

    1 GROUP BY子句中不能使用字符串型、浮點數(shù)型常量, 否則會報告錯誤信息2。如:

    select IntField, 'aaa', count(*) from tab group by IntField, 'aaa'; select IntField, 0.5, count(*) from tab group by IntField, 0.5;

    2 GROUP BY子句中也不能使用0和負(fù)整數(shù),否則會報錯誤信息1。如:

    select IntField, 0, count(*) from tab group by IntField, 0;select IntField, -1, count(*) from tab group by IntField, -1;

    那么,GROUP BY子句中可以使用什么類型的常量?經(jīng)測試,在常用的類型中,正整數(shù)、日期型常量均可以。

    select IntField, 1, count(*) from tab group by IntField, 1;select IntField, now(), count(*) from tab group by IntField, now();

    對于第一節(jié)中的sql,因為0和‘null'有著特殊的含義,該如何處理?

    實際上,在GROUP BY子句中可以不使用任何常量,只列出聚集字段即可,即將第一節(jié)中的sql改為:

    insert into sum_tab (IntField1, IntField2, StrField1, StrField2, cnt)
    select IntField, 0, StrField, 'null', count(*) from detail_tab
    where ...
    group by IntField, StrField;

    三、MySQL的情況

    考慮到將來統(tǒng)計程序也可能移植到MySQL(版本8.x),隨后進(jìn)行了類似測試,結(jié)論為:

    1 支持不帶任何常量的GROUP BY子句;

    2 支持帶非0整數(shù)、浮點數(shù)(包括0.0)、字符串、日期型常量的GROUP BY子句。

    也就是說,在常見類型中,MySQL 8的GROUP BY子句支持除整數(shù)0(非浮點數(shù)0.0)以外的所有類型。否則,會報錯:

    ERROR 1054 (42S22): Unknown column '0' in 'group statement'

    順便說一句,Oracle對整數(shù)0也支持。

    四、結(jié)論

    1、PostgreSQL的GROUP BY子句只支持正整數(shù)、日期型的常量;

    2、MySQL支持除非0整數(shù)以外的所有常規(guī)類型常量,而Oracle似乎全部支持;

    3、如果有在各各數(shù)據(jù)庫平臺可移植的需求,盡量不要在GROUP BY子句中使用常量。

    補充:PostgreSQL的GROUP BY問題

    關(guān)于PostgreSQL數(shù)據(jù)庫分組查詢時,跟mysql還是有區(qū)別的。糾結(jié)了半天

    SELECT
     prjnumber,
     zjhm,
    -- to_char ( to_timestamp ( kqsj / 1000 ), 'yyyy-MM-dd HH24:MI:SS' ) kqsj,

     kqflag,
     workername,
     max(kqsj)
     
    -- workertype,
    -- tpcodename,
    -- isactive
    FROM
     GB_CLOCKINGIN
    WHERE
     kqsj BETWEEN 1590940800000 AND 1593532799000
     AND prjnumber = '3205842019121101A01000'

    GROUP BY
     zjhm,
     kqflag,
     prjnumber,
     workername
    文章來源:腳本之家

    來源地址:https://www.jb51.net/article/205406.htm

    申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機遇!

    相關(guān)文章

    熱門排行

    信息推薦