草庐IT

MySQL - 基于字段列表的数据集,如果字段不存在,则为该字段输入虚拟行

coder 2023-10-22 原文

好的,

所以我试图在这里找到一个类似的问题。没有看到一个完全相关的。

我有一个包含各州销售数据的表格。数据是这样组织的;

SELECT * FROM SALES_BY_STATE;

PRODUCTGROUP    SALES   STATE   MONTH   YEAR
PRODUCTGROUP1   1000    A       JAN     2016
PRODUCTGROUP1   1000    B       JAN     2016
PRODUCTGROUP1   1000    F       JAN     2016
PRODUCTGROUP1   1000    G       JAN     2016
PRODUCTGROUP1   1000    H       JAN     2016
PRODUCTGROUP1   1000    I       JAN     2016
PRODUCTGROUP1   1000    J       JAN     2016
PRODUCTGROUP1   1000    K       JAN     2016
PRODUCTGROUP2   1000    A       JAN     2016
PRODUCTGROUP2   1000    B       JAN     2016
PRODUCTGROUP2   1000    C       JAN     2016
PRODUCTGROUP2   1000    D       JAN     2016
PRODUCTGROUP2   1000    E       JAN     2016
PRODUCTGROUP2   1000    F       JAN     2016
PRODUCTGROUP2   1000    G       JAN     2016
PRODUCTGROUP2   1000    H       JAN     2016
PRODUCTGROUP2   1000    I       JAN     2016
PRODUCTGROUP2   1000    J       JAN     2016
PRODUCTGROUP2   1000    K       JAN     2016

我有 11 个状态 (A - K)。我想创建一个显示状态的语句,而不管该状态是否有相关行。正如您在上面的数据中看到的,PRODUCT2 有状态 A - K 的记录。但是,PRODUCTGROUP1 缺少一些。

我想把数据提取出来显示如下;

PRODUCTGROUP    SALES   STATE   MONTH   YEAR
PRODUCTGROUP1   1000    A       JAN     2016
PRODUCTGROUP1   1000    B       JAN     2016
PRODUCTGROUP1   0       C       JAN     2016
PRODUCTGROUP1   0       D       JAN     2016
PRODUCTGROUP1   0       E       JAN     2016
PRODUCTGROUP1   1000    F       JAN     2016
PRODUCTGROUP1   1000    G       JAN     2016
PRODUCTGROUP1   1000    H       JAN     2016
PRODUCTGROUP1   1000    I       JAN     2016
PRODUCTGROUP1   1000    J       JAN     2016
PRODUCTGROUP1   1000    K       JAN     2016
PRODUCTGROUP2   1000    A       JAN     2016
PRODUCTGROUP2   1000    B       JAN     2016
PRODUCTGROUP2   1000    C       JAN     2016
PRODUCTGROUP2   1000    D       JAN     2016
PRODUCTGROUP2   1000    E       JAN     2016
PRODUCTGROUP2   1000    F       JAN     2016
PRODUCTGROUP2   1000    G       JAN     2016
PRODUCTGROUP2   1000    H       JAN     2016
PRODUCTGROUP2   1000    I       JAN     2016
PRODUCTGROUP2   1000    J       JAN     2016
PRODUCTGROUP2   1000    K       JAN     2016

这有意义吗?我基本上想在结果中显示状态,而不管数据集中是否有相关行。

不确定我会怎么做。任何帮助将不胜感激。

最佳答案

您可以使用笛卡尔积构建一个整体列表。请注意,我们是根据现有数据构建的,因此如果您突然决定拥有一个 STATE“L”,那么 SALES_BY_STATE 表中必须至少有一行具有该 STATE。时间段也是如此。

如果你有一张大 table ,使用一些临时 table 可以防止笛卡尔积爆炸。

create temporary table if not exists pg AS select distinct PRODUCTGROUP from SALES_BY_STATE;
create temporary table if not exists st AS select distinct STATE from SALES_BY_STATE;
create temporary table if not exists mo AS select distinct MONTH from SALES_BY_STATE;
create temporary table if not exists yr AS select distinct YEAR from SALES_BY_STATE;

select list.PRODUCTGROUP, list.STATE, list.MONTH,
    list.YEAR, IFNULL(s.SALES, 0) 

FROM
    (select distinct PRODUCTGROUP, STATE, MONTH, YEAR 
    FROM pg, st, mo, yr  ) as list

LEFT JOIN
    SALES_BY_STATE as s
ON
    list.PRODUCTGROUP = s.PRODUCTGROUP and list.STATE = s.STATE
   and list.MONTH = s.MONTH AND list.YEAR = s.YEAR
ORDER BY
    list.PRODUCTGROUP, list.STATE, list.MONTH, list.YEAR

关于MySQL - 基于字段列表的数据集,如果字段不存在,则为该字段输入虚拟行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39482345/

有关MySQL - 基于字段列表的数据集,如果字段不存在,则为该字段输入虚拟行的更多相关文章

  1. ruby-on-rails - 如果为空或不验证数值,则使属性默认为 0 - 2

    我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val

  2. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  3. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  4. ruby - RVM 使用列表[0] - 2

    是否有类似“RVMuse1”或“RVMuselist[0]”之类的内容而不是键入整个版本号。在任何时候,我们都会看到一个可能包含5个或更多ruby的列表,我们可以轻松地键入一个数字而不是X.X.X。这也有助于rvmgemset。 最佳答案 这在RVM2.0中是可能的=>https://docs.google.com/document/d/1xW9GeEpLOWPcddDg_hOPvK4oeLxJmU3Q5FiCNT7nTAc/edit?usp=sharing-知道链接的任何人都可以发表评论

  5. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  6. ruby - 如果指定键的值在数组中相同,如何合并哈希 - 2

    我有一个这样的哈希数组:[{:foo=>2,:date=>Sat,01Sep2014},{:foo2=>2,:date=>Sat,02Sep2014},{:foo3=>3,:date=>Sat,01Sep2014},{:foo4=>4,:date=>Sat,03Sep2014},{:foo5=>5,:date=>Sat,02Sep2014}]如果:date相同,我想合并哈希值。我对上面数组的期望是:[{:foo=>2,:foo3=>3,:date=>Sat,01Sep2014},{:foo2=>2,:foo5=>5:date=>Sat,02Sep2014},{:foo4=>4,:dat

  7. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

    我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

  8. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  9. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  10. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

随机推荐