最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年02月05日 09:39:49   作者:聞歌感舊  
這篇文章主要介紹了PostgreSQL對(duì)GROUP BY子句使用常量的特殊限制詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

一、問(wèn)題描述

最近,一個(gè)統(tǒng)計(jì)程序從Oracle移植到PostgreSQL(版本9.4)時(shí),接連報(bào)告錯(cuò)誤:

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

錯(cuò)誤信息2: non-integer constant in GROUP BY.

產(chǎn)生錯(cuò)誤的sql類(lèi)似于:

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ì)后的記錄信息。

二、原因分析

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

1 GROUP BY子句中不能使用字符串型、浮點(diǎn)數(shù)型常量, 否則會(huì)報(bào)告錯(cuò)誤信息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ù),否則會(huì)報(bào)錯(cuò)誤信息1。如:

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

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

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

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

實(shí)際上,在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的情況

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

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

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

也就是說(shuō),在常見(jiàn)類(lèi)型中,MySQL 8的GROUP BY子句支持除整數(shù)0(非浮點(diǎn)數(shù)0.0)以外的所有類(lèi)型。否則,會(huì)報(bào)錯(cuò):

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

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

四、結(jié)論

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

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

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

補(bǔ)充:PostgreSQL的GROUP BY問(wèn)題

關(guān)于PostgreSQL數(shù)據(jù)庫(kù)分組查詢(xún)時(shí),跟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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • PostGresql 實(shí)現(xiàn)四舍五入、小數(shù)轉(zhuǎn)換、百分比的用法說(shuō)明

    PostGresql 實(shí)現(xiàn)四舍五入、小數(shù)轉(zhuǎn)換、百分比的用法說(shuō)明

    這篇文章主要介紹了PostGresql 實(shí)現(xiàn)四舍五入、小數(shù)轉(zhuǎn)換、百分比的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Postgresql - 查看鎖表信息的實(shí)現(xiàn)

    Postgresql - 查看鎖表信息的實(shí)現(xiàn)

    這篇文章主要介紹了Postgresql 查看鎖表信息的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • postgresql常用日期函數(shù)使用整理

    postgresql常用日期函數(shù)使用整理

    在開(kāi)發(fā)過(guò)程中經(jīng)常要取日期的年,月,日,小時(shí)等值,下面這篇文章主要給大家介紹了關(guān)于postgresql常用日期函數(shù)使用整理的相關(guān)資料,文中通過(guò)代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02
  • PostgreSQL教程(四):數(shù)據(jù)類(lèi)型詳解

    PostgreSQL教程(四):數(shù)據(jù)類(lèi)型詳解

    這篇文章主要介紹了PostgreSQL教程(四):數(shù)據(jù)類(lèi)型詳解,本文講解了數(shù)值類(lèi)型、字符類(lèi)型、布爾類(lèi)型、位串類(lèi)型、數(shù)組、復(fù)合類(lèi)型等數(shù)據(jù)類(lèi)型,需要的朋友可以參考下
    2015-05-05
  • pgsql 變量賦值方法及注意事項(xiàng)

    pgsql 變量賦值方法及注意事項(xiàng)

    這篇文章主要介紹了pgsql 變量賦值方法及注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • 使用PostgreSQL為表或視圖創(chuàng)建備注的操作

    使用PostgreSQL為表或視圖創(chuàng)建備注的操作

    這篇文章主要介紹了使用PostgreSQL為表或視圖創(chuàng)建備注的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • postgresql數(shù)據(jù)庫(kù)表ID自增的實(shí)現(xiàn)代碼

    postgresql數(shù)據(jù)庫(kù)表ID自增的實(shí)現(xiàn)代碼

    postgresql數(shù)據(jù)庫(kù)可以創(chuàng)建主鍵,但是沒(méi)有像mysql那樣直接指定主鍵自增的auto_increment關(guān)鍵字,因此如果在postgresql中創(chuàng)建表指定主鍵自增使用auto_increment會(huì)報(bào)錯(cuò),本文通過(guò)一個(gè)實(shí)例給大家演示自增ID的實(shí)現(xiàn),需要的朋友可以參考下
    2023-12-12
  • CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作

    CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作

    這篇文章主要介紹了CentOS PostgreSQL 12 主從復(fù)制(主從切換)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL教程(十六):系統(tǒng)視圖詳解

    PostgreSQL教程(十六):系統(tǒng)視圖詳解

    這篇文章主要介紹了PostgreSQL教程(十六):系統(tǒng)視圖詳解,本文講解了pg_tables、pg_indexes、pg_views、pg_user、pg_roles、pg_rules、pg_settings等視圖的作用和字段含義等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Linux CentOS 7源碼編譯安裝PostgreSQL9.5

    Linux CentOS 7源碼編譯安裝PostgreSQL9.5

    這篇文章主要為大家詳細(xì)介紹了Linux CentOS 7源碼編譯安裝PostgreSQL9.5的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11

最新評(píng)論

龙州县| 延寿县| 旅游| 新源县| 弥勒县| 西峡县| 依安县| 都匀市| 宜春市| 饶平县| 台安县| 宁都县| 周口市| 岗巴县| 土默特右旗| 仁化县| 仁怀市| 永川市| 青海省| 永定县| 富阳市| 高青县| 广昌县| 潮安县| 资溪县| 望都县| 合作市| 和田县| 岑溪市| 翁牛特旗| 吉木乃县| 景泰县| 新和县| 台州市| 伊金霍洛旗| 汉阴县| 周口市| 隆昌县| 峨眉山市| 靖江市| 江口县|