【问题标题】:alternatives to "Having" in SQLSQL 中“拥有”的替代方案
【发布时间】:2022-01-25 18:15:32
【问题描述】:

我在 DB 类中,我必须了解并证明可以在不使用自己的情况下获得 HAVINGGROUP BY 的结果。我搜索了这 2 个命令的替代方法,但我什么都不懂。

谁能给我例子?

select n_name 
from(
select n_name, count( distinct c_custkey) AS aa 
from nation AS n INNER JOIN customer AS c ON c.c_nationkey=n.n_nationkey

GROUP BY n_name 
HAVING aa=(select MAX(cc) 
from ( select n_name, count(distinct c_custkey) AS cc 
from nation AS n 
INNER JOIN customer AS c ON c.c_nationkey=n.n_nationkey
    GROUP BY n_name
    ORDER BY n_name))
    ORDER BY n_name);

【问题讨论】:

  • 您必须详细说明。使用group byhaving 根本不是语法糖。它们的替代品只会更加复杂。您发布的查询对我来说似乎没有用。大多数情况下,你会使用很多 select distinct 和我想象的相关子查询。

标签: sql database


【解决方案1】:

作为一种解决方案,您可以使用WITH 合并请求的重复部分并通过INNER JOIN 进行检查:

WITH
  base_data AS (
    SELECT n_name, COUNT(DISTINCT c_custkey) AS count
    FROM nation AS n INNER JOIN customer AS c ON c.c_nationkey=n.n_nationkey
    GROUP BY n_name
  )

SELECT n_name
FROM
  base_data
  INNER JOIN (
    SELECT MAX(count) AS max_count
    FROM base_data
  ) AS max_data ON base_data.count = max_data.max_count
ORDER BY n_name

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 2018-03-19
    • 2017-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2011-12-29
    相关资源
    最近更新 更多