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

时间:2018-07-06 04:43:51

标签: postgresql

我有一个表定义为:

git init

基本上,它包含商品的要约数量。 我正在寻找一种选择id的方法,并且仅选择两列作为offer和roi,其中roi是所有要约中最大的价值。该怎么做?

1 个答案:

答案 0 :(得分:0)

如果您真的只打算将其用于3个优惠和3个rois,则可以执行以下操作:

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
)

一个商品的所有报价共享相同的good_id。然后,您可以进行汇总查询以获取答案。