SQL GROUP BY 子句中的表达式或列
SQL expression or columns in the GROUP BY clause
这更像是理论问题而不是问题。假设我有一个 table,其中包含三列 id, Country1, Country2
。
我要运行简单示例查询:
SELECT
CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END AS [Country],
COUNT(id) AS [Countries_count]
FROM ExampleTable
GROUP BY
CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END
无论我是否放入整个非聚合表达式,查询都将有效
GROUP BY
CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END
或仅此表达式中的列
GROUP BY
Country1,
Country2
在 GROUP BY
子句中。
我应该将每个非聚合表达式(有时非常大)放入 GROUP BY
子句中,还是可以只放入这些表达式中的列?如果我 can/cannot,为什么?
你问的是以下哪个更适合查询:
GROUP BY CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END
或
GROUP BY Country1, Country2
答案通常是第一个。但是,这取决于你想做什么。
考虑以下数据:
ID Country1 Country2
1 A
2 A A
3 A
这个查询:
SELECT (CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END) AS [Country],
COUNT(id) AS [Countries_count]
FROM ExampleTable
GROUP BY (CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END)
Returns一行总计数
A 3
这个版本
SELECT (CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END) AS [Country],
COUNT(id) AS [Countries_count]
FROM ExampleTable
GROUP BY Country1, Country2
Returns三行:
A 1
A 1
A 1
在大多数情况下,我希望一行的计数为 3。在某些情况下,这可能是所需的输出。
这更像是理论问题而不是问题。假设我有一个 table,其中包含三列 id, Country1, Country2
。
我要运行简单示例查询:
SELECT
CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END AS [Country],
COUNT(id) AS [Countries_count]
FROM ExampleTable
GROUP BY
CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END
无论我是否放入整个非聚合表达式,查询都将有效
GROUP BY
CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END
或仅此表达式中的列
GROUP BY
Country1,
Country2
在 GROUP BY
子句中。
我应该将每个非聚合表达式(有时非常大)放入 GROUP BY
子句中,还是可以只放入这些表达式中的列?如果我 can/cannot,为什么?
你问的是以下哪个更适合查询:
GROUP BY CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END
或
GROUP BY Country1, Country2
答案通常是第一个。但是,这取决于你想做什么。
考虑以下数据:
ID Country1 Country2
1 A
2 A A
3 A
这个查询:
SELECT (CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END) AS [Country],
COUNT(id) AS [Countries_count]
FROM ExampleTable
GROUP BY (CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END)
Returns一行总计数
A 3
这个版本
SELECT (CASE WHEN Country1 = '' THEN Country2 ELSE Country1 END) AS [Country],
COUNT(id) AS [Countries_count]
FROM ExampleTable
GROUP BY Country1, Country2
Returns三行:
A 1
A 1
A 1
在大多数情况下,我希望一行的计数为 3。在某些情况下,这可能是所需的输出。