SQL 最小函数

SQL min function

我正在尝试获取两列,frequencyfrequency - min(frequency),但我看到的第二列为零。可能有什么问题?

SELECT
    frequency, frequency - min(frequency)
    FROM
    words
GROUP BY id
ORDER BY frequency;

添加子查询returns最小频率值:

SELECT
    frequency, frequency - (select min(frequency) from words)
    FROM
    words
ORDER BY frequency;

编辑:

将其包装在派生的 table:

SELECT frequency, frequency - minfreq, frequency + minfreq
FROM words
    CROSS JOIN (select min(frequency) minfreq from words) dt
ORDER BY frequency

您的查询按频率的唯一值分组。在每个这样的组中,最小频率就是频率本身,因此在减去两者时总是得到 0。相反,您可以使用 min:

的窗口版本
SELECT   frequency, frequency - MIN(frequency) OVER() AS diff
FROM     words
ORDER BY frequency

试一试:

SELECT frequency, frequency-min_frequency
FROM ( 
SELECT frequency,  MIN(frequency) AS min_frequency 
FROM words
GROUP BY frequency
) as A 
ORDER BY frequency;

这当然是一个奇怪的查询。您按 ID 分组,因此每个 ID 得到一个结果记录。但是ID提示这是table的唯一标识记录的ID。所以 GROUP BY id 不会改变任何东西,您仍然会在结果中获得所有记录。除了一个例外:min(frequency) 现在表示每组的最小频率。由于 "group" 是一条记录,最小值当然是值本身。非聚合的 frequency 也是由 ID 唯一标识的记录频率。所以你的查询可以重写为:

SELECT
  frequency, frequency - frequency
FROM words
ORDER BY frequency;

我猜您想将每条记录的频率与 table 中找到的最小频率进行比较?您将在子查询中获得此值:

SELECT
  frequency, frequency - (select min(frequency) from words)
FROM words
ORDER BY frequency;

或:

SELECT
  w.frequency, w.frequency - m.min_frequncy
FROM words w
CROSS JOIN (select min(frequency) as min_frequncy from words) m
ORDER BY frequency;