【问题标题】:An Efficient Summarisation of this SQL Query Solution此 SQL 查询解决方案的有效总结
【发布时间】:2015-05-13 06:03:31
【问题描述】:

我从SQL-EX.RU得到了这个 SQL 查询练习

找出只生产同类型型号的制造商,以及 这些模型的数量超过1。推断:制造商,类型

表信息:

产品(制造商、型号、类型)

PC(代码、型号、速度、内存、高清、光盘、价格)

笔记本电脑(代码、型号、速度、内存、高清、屏幕、价格)打印机(代码、 型号、颜色、类型、价格)

我写的版本(先在我的jotta pad上刮):

SELECT Product.maker, Product.type
FROM Product
WHERE Product.maker IN
(SELECT X.maker
FROM
(SELECT DISTINCT maker,type 
FROM Product
) AS X
GROUP BY X.maker
HAVING COUNT(X.type) = 1
)
GROUP BY Product.maker,Product.type
HAVING COUNT(Product.model) > 1

这给了我正确的结果。但是,我相信这可能不是唯一的解决方案(至少不是理想的解决方案)——因为我不是 SQL 向导。

如果我能更好地简化答案,我将不胜感激,我将使用新的查询语句更新问题。

更新 自最初发布以来,我将其总结为:

SELECT maker, type
FROM Product
WHERE Product.maker IN
(
SELECT maker
FROM Product
GROUP BY maker
HAVING COUNT(DISTINCT type)=1
) 
GROUP BY maker, type
HAVING COUNT(product.model) > 1

【问题讨论】:

    标签: sql select aggregate-functions


    【解决方案1】:

    可以简化:

    SELECT  maker ,
            MAX(type) AS type
    FROM    product
    GROUP BY maker
    HAVING  COUNT(DISTINCT type) = 1
            AND COUNT(*) > 1
    

    在这里,您按制造商对结果进行分组,并且您只需要那些不同类型计数为 1 且组中总行数大于 1 的组。

    你可以写:

    HAVING  COUNT(DISTINCT type) = 1
            AND COUNT(DISTINCT model) > 1
    

    但是和It is assumed that model numbers in the Product table are unique for all the makers and product types是一样的。

    【讨论】:

    • 我仍在努力将诸如 COUNT 之类的聚合函数与诸如 DISTINCT 之类的子句混合在一起。感谢您的简洁回答:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-04
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    相关资源
    最近更新 更多