代码之家  ›  专栏  ›  技术社区  ›  sergeda

在PostgreSQL查询结果中返回不同的列

  •  0
  • sergeda  · 技术社区  · 6 年前

    我有一张表定义为:

    CREATE TABLE analysis (
           id BIGSERIAL NOT NULL,
           offer1 numeric(19, 2) NOT NULL,
           roi1 numeric(19, 2) NOT NULL,
           offer2 numeric(19, 2) NOT NULL,
           roi2 numeric(19, 2) NOT NULL, 
           offer3 numeric(19, 2) NOT NULL,
           roi3 numeric(19, 2) NOT NULL,
           PRIMARY KEY (id));
    

    基本上它包含了一个好的出价的数量。 我正在寻找一种方法来选择id,只有两列作为offer和roi,其中roi是所有offer中最大的价值。怎么做?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Peter Haight    6 年前

    如果你真的只想用这个来提供3个优惠和3个投资回报率,那么你可以这样做:

    SELECT
      id,
      CASE
        WHEN offer1 > offer2 THEN
          CASE WHEN offer1 > offer3 THEN offer1 ELSE offer3 END
        WHEN offer2 > offer3 THEN
          offer2
        ELSE
          offer3
      END AS offer,
      CASE
        WHEN offer1 > offer2 THEN
          CASE WHEN offer1 > offer3 THEN roi1 ELSE roi3 END
        WHEN offer2 > offer3 THEN
          roi2
        ELSE
          roi3
      END AS roi
    FROM
      analysis
    

    如果您要做的不仅仅是3个,那么您可能需要考虑一个不同的数据结构,其中您有:

    CREATE TABLE
      offers
    (
      id BIGSERIAL NOT NULL,
      good_id BIGINT,
      offer numeric(19, 2) NOT NULL,
      roi numeric(12, 2) NOT NULL
    )
    

    如果一件商品的所有报价都有相同的商品ID,那么您可以做一个聚合查询来得到您的答案。