10

私はいくつかのSQL演習を行っていますが、これから説明する演習にとらわれています。

メーカー、モデル、タイプの3つの列を持つproductというテーブルがあります。

これはの結果ですselect * from product

ここに画像の説明を入力してください

演習では、次のように述べています。同じタイプのモデルのみを製造し、それらのモデルの数が1を超えるメーカーを見つけます。推測:メーカー、タイプ。

正しいクエリはこれを返すはずです:

ここに画像の説明を入力してください

私のアプローチは、最初にどのメーカーが1種類の製品しか製造していないかを確認し、次に1つのモデルしかないメーカーを除外することでした。これを行うために、次のクエリを使用しました。これは、メーカーを表示することしかできず、タイプと演習で両方を要求することはできないという事実を除いて、正しい結果を返します。

これは私の質問です:

SELECT
DISTINCT maker
FROM product
GROUP BY maker
HAVING COUNT(distinct type) = 1 
AND
COUNT(model)> 1

そしてそれはこれを返します:

ここに画像の説明を入力してください

次に、これを実行してタイプも表示しようとすると、次のようになります。

SELECT
DISTINCT maker,type
FROM product
GROUP BY maker,type
HAVING COUNT(distinct type) = 1 
AND
COUNT(model)> 1

これは私が得るものです:

ここに画像の説明を入力してください

これが期待どおりに機能しない理由について何か考えがありますか?この問題を解決するためにあなたは何をしますか?私はこれを3時間以上解決しようとしてきましたが、成功しませんでした。:( お願い助けて。

4

6 に答える 6

16

正確に1つのタイプを含むグループのみを返す場合は、MAX/を使用してそのグループのがMIN何であるかを確認できます。type

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

リストに追加typeするGROUP BYと、すべての組み合わせの結果行が表示されmaker,typeます。これが、2回目の試行が機能しない理由です。

于 2013-01-03T17:40:39.267 に答える
5
SELECT DISTINCT maker, type 
FROM product 
WHERE maker IN 
   (SELECT DISTINCT maker 
    FROM product 
    GROUP BY maker HAVING COUNT(distinct type) = 1
    AND count(model) > 1)
于 2013-04-23T12:33:33.783 に答える
1
SELECT
DISTINCT maker, type
FROM makertype
GROUP BY maker
HAVING COUNT(distinct type) = 1 
AND
COUNT(ident)> 1

メーカーごとにグループ化して2番目のクエリを入力しようとしています。これにより、1つのタイプ(各グループには1つの異なるメーカーとタイプのペアが含まれているため常にtrue)と2つのタイプを持つメーカーとタイプの任意の組み合わせが分離されます。以上のモデル。メーカーごとにグループ化するだけです。

于 2013-01-03T17:50:17.007 に答える
0
    select distinct product.maker, product.type from product, (SELECT maker

    FROM product

    GROUP BY maker

    HAVING COUNT(distinct type) = 1 

           AND

           COUNT(model)> 1) as x

    where x.maker=product.maker

これを試して。それは私のために働いた。

于 2013-02-27T17:40:22.163 に答える
0
SELECT MAKER,MAX(TYPE)
 FROM PRODUCT
 GROUP  BY MAKER
 HAVING  COUNT(*)>1  AND  MAX(TYPE)=MIN(TYPE)
于 2015-04-03T12:25:02.827 に答える
0

これを試して:

select maker, max(type) as type from Product
Group by maker
Having count (Distinct type) = 1 and Count(maker)>1
于 2015-08-30T08:25:50.197 に答える