【问题标题】:Adding max(count) and min(count) to query将 max(count) 和 min(count) 添加到查询
【发布时间】:2015-05-21 17:50:26
【问题描述】:

我正在尝试将 max 和 min 添加到下面的查询中:

SELECT category, COUNT(distinct VIN) COUNT
FROM stock
group by category
order by category ASC

期望的结果是显示计数中项目最多的类别,以及显示计数中项目最少的类别。

当前输出:

CATEGORY COUNT
Sedan    25
SUV      15
TRUCK    15
AWD      10

期望的输出:

CATEGORY COUNT
Sedan    25
AWD      10

我基本上想显示在此示例中为 SEDAN 的最大计数和为 AWD 的最小类别计数

我相信这需要带有嵌套子查询的HAVING 语句,任何帮助都会非常感激

我正在使用 Oracle 11g

【问题讨论】:

  • 显示每个类别的最大计数和最小计数” - 没有意义。每个类别只有一个计数。您能否编辑您的问题并添加一些示例数据和基于该数据的预期输出。
  • @a_horse_with_no_name 感谢您的回复我已经更改了问题并提供了所需的输出:D
  • 好用的联合!!!
  • @N.Molderf 谢谢你的回复 union.. 我对这个功能不太熟悉,你有一个链接可以帮助我吗:)
  • @ITworldR 类似这样的东西 Select Max from table UNION Select MIn from table or add SQLFiddle 我将创建这个查询

标签: sql oracle11g max min


【解决方案1】:
select count(VIN), Category 
from STOCK
having count(VIN)=(select max(count(VIN)) from STOCK group by Category )
OR count(VIN)=(select min(count(VIN))  from STOCK group by Category )
group by Category; 

【讨论】:

  • 这个查询很完美:D
【解决方案2】:

我能想到的最好方法是合并两个查询以找到最大和最小计数,如下所示:

Select category, CNT
FROM
(SELECT category, COUNT(distinct VIN) CNT
FROM stock
group by category
Order by CNT asc) a
where RowNum = 1
UNION
Select category, CNT
FROM
(SELECT category, COUNT(distinct VIN) CNT
FROM stock
group by category
Order by CNT desc) a
where RowNum = 1

SQL 小提琴:http://www.sqlfiddle.com/#!4/555515/18/0

【讨论】:

    【解决方案3】:
    select 
       count(VIN), 
       Category 
    from STOCK
    having count(VIN)=
        (
            select max(count(VIN))  
            from STOCK group by project_status_id 
        )
        OR count(project_status_id)=
        (
            select min(count(project_status_id))  
            from project_status group by project_status_id 
         )
    group by project_status_id
    

    【讨论】:

    • 是的,你是对的!这就是我的意思
    • 欢迎。保持。 :)
    • 不明白 project_status_id 和表 project_status 是从哪里来的?复制/粘贴错误?
    • 是的,克里斯蒂安,这是复制粘贴错误。你可以参考我的下一条评论。
    • select count(VIN), Category from STOCK with count(VIN)=(select max(count(VIN)) from STOCK group by Category ) OR count(VIN)=(select min(count( VIN)) 来自 STOCK 按类别分组 ) 按类别分组;
    【解决方案4】:

    SQL Fiddle

    Oracle 11g R2 架构设置

    CREATE TABLE counts ( CATEGORY, "COUNT" ) AS
              SELECT 'Sedan',    25 FROM DUAL
    UNION ALL SELECT 'SUV',      15 FROM DUAL
    UNION ALL SELECT 'TRUCK',    15 FROM DUAL
    UNION ALL SELECT 'AWD',      10 FROM DUAL;
    

    查询 1

    SELECT MAX( CATEGORY ) KEEP ( DENSE_RANK LAST ORDER BY "COUNT" ASC ) AS CATEGORY,
           MAX( "COUNT" ) AS "COUNT"
    FROM   COUNTS
    UNION ALL
    SELECT MIN( CATEGORY ) KEEP ( DENSE_RANK FIRST ORDER BY "COUNT" ASC ) AS CATEGORY,
           MIN( "COUNT" ) AS "COUNT"
    FROM   COUNTS
    

    Results

    | CATEGORY | COUNT |
    |----------|-------|
    |    Sedan |    25 |
    |      AWD |    10 |
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-26
      • 2011-12-11
      • 2014-12-31
      • 2010-09-24
      • 2014-05-22
      • 2020-10-07
      相关资源
      最近更新 更多