1

如何查找以下查询的数据

原始来源问题 89

表结构: 产品(制造商、型号、类型)

编辑 将 sqlfiddle 用于架构

任务:
找出产品表中型号数量最多的制造商以及型号数量最少的制造商。输出:制造商,型号数量

有问题的提示是GROUP BY,HAVINGIN

我尝试了各种方法来找到这个基本上我想出的是我需要使用Max(COUNT(model))

结果应该是

maker   qty 
A        7 --max
C        1 --min

我想出的一个解决方案是

select maker, count(ps.model) as Count from product as ps
group by ps.maker
having count(ps.model) in
(
select max(cnt) from (select count(model) as cnt from product group by maker)t
union
select min(cnt) from (select count(model) as cnt from product group by maker)t
)

有没有其他办法。

4

2 回答 2

2

你可以简单...

SELECT *
FROM (
    SELECT TOP 1 maker, COUNT(*) C
    FROM product
    GROUP BY maker
    ORDER BY C DESC
) Q1
UNION
SELECT *
FROM (
    SELECT TOP 1 maker, COUNT(*) C
    FROM product
    GROUP BY maker
    ORDER BY C
) Q2;

...或者如果您喜欢 CTE...

WITH CTE AS (
    SELECT maker, COUNT(*) C
    FROM product
    GROUP BY maker
)
SELECT *
FROM (
    SELECT TOP 1 *
    FROM CTE
    ORDER BY C DESC
) Q1
UNION
SELECT *
FROM (
    SELECT TOP 1 *
    FROM CTE
    ORDER BY C
) Q2;

...as demonstrated in this SQL Fiddle.

于 2012-08-26T10:02:45.183 回答
1

如果您使用的是 SQL Server 2008,则可以通过以下方式对其进行简化:http ://www.sqlfiddle.com/#!3/25ba8/7

with counts as
(
  select maker, count(ps.model) as Count from product as ps
  group by ps.maker
)
select cx.*
from counts cx
join
(
  select min(count) as lo, max(count) as hi
  from counts
) as hi_lo 
on cx.count = hi_lo.lo or cx.count = hi_lo.hi;
于 2012-08-26T09:01:37.880 回答