跨所有行重复的列的最小值和最大值

Min and max of a column duplicated across all rows

我有一个 orders table 列 supplier_idrevenue:

每个供应商的总收入 table 如下:

SELECT
  supplier_id,
  SUM(revenue) as total_revenue
FROM
  orders
GROUP BY
  supplier_id

我想将收入从 0 标准化为 1:

因此,我需要所有供应商的所有总收入的 minmax

如果可能,将这些值作为每行重复的附加列:

如何在 MySQL 中执行此操作?

请注意,我想要所有供应商总收入的 minmax,而不是每个供应商订单的最小和最大收入.

您可以尝试使用 JOIN

SELECT 
    t1.supplier_id,
    t1.total_revenue,
    t2.max_total_revenue,
    t2.min_total_revenue
FROM (
    SELECT 
        supplier_id,
        SUM(revenue) as total_revenue
    FROM orders
    GROUP BY supplier_id
) t1
LEFT JOIN (
    SELECT 
        MAX(total_revenue) max_total_revenue,
        MIN(total_revenue) min_total_revenue
    FROM (
        SELECT 
            supplier_id, 
            SUM(revenue) as total_revenue
        FROM orders
        GROUP BY supplier_id
    )
) t2 ON 1 = 1

这是一种使用变量来确定最小值和最大值的方法

SELECT supplier_id,
    total_revenue,
    @min,
    @max
FROM (
    SELECT supplier_id,
        total_revenue,
        @min := coalesce(@min,total_revenue),
        @max := total_revenue
    FROM (
        SELECT 
            supplier_id,
            SUM(revenue) as total_revenue
        FROM orders
        GROUP BY supplier_id
        ORDER BY total_revenue
    ) t
) t