跨所有行重复的列的最小值和最大值
Min and max of a column duplicated across all rows
我有一个 orders
table 列 supplier_id
和 revenue
:
每个供应商的总收入 table 如下:
SELECT
supplier_id,
SUM(revenue) as total_revenue
FROM
orders
GROUP BY
supplier_id
我想将收入从 0 标准化为 1:
因此,我需要所有供应商的所有总收入的 min
和 max
。
如果可能,将这些值作为每行重复的附加列:
如何在 MySQL 中执行此操作?
请注意,我想要所有供应商总收入的 min
和 max
,而不是每个供应商订单的最小和最大收入.
您可以尝试使用 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
我有一个 orders
table 列 supplier_id
和 revenue
:
每个供应商的总收入 table 如下:
SELECT
supplier_id,
SUM(revenue) as total_revenue
FROM
orders
GROUP BY
supplier_id
我想将收入从 0 标准化为 1:
因此,我需要所有供应商的所有总收入的 min
和 max
。
如果可能,将这些值作为每行重复的附加列:
如何在 MySQL 中执行此操作?
请注意,我想要所有供应商总收入的 min
和 max
,而不是每个供应商订单的最小和最大收入.
您可以尝试使用 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