SQL 最小函数
SQL min function
我正在尝试获取两列,frequency
和 frequency - 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;
我正在尝试获取两列,frequency
和 frequency - 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;