1

これはテーブルです。質問は*最も多くの材料を使用するピザを見つける*

答えが特別なことは知っていますが、クエリを使用してそれを見つける方法がわかりません。私は多くの異なる方法を試しましたが、うまくいきませんでした。前もって感謝します。

   pizza    | ingredient | amount 
------------+------------+--------
 margarita  | cheese     |    120
 margarita  | spice      |      5
 ham        | ham        |    150
 ham        | spice      |      5
 napolitana | anchovies  |    100
 napolitana | olives     |     75
 napolitana | spice      |     10
 hawaiian   | ham        |    100
 hawaiian   | pineapple  |    100
 hawaiian   | spice      |      5
 cabanossi  | cabanossi  |    150
 cabanossi  | spice      |     10
 siciliano  | onion      |     50
 siciliano  | capsicum   |     75
 siciliano  | olives     |     50
 siciliano  | anchovies  |     50
 siciliano  | spice      |     15
 americano  | salami     |    120
 americano  | pepperoni  |     75
 americano  | spice      |     10
 mexicano   | onion      |     75
 mexicano   | capsicum   |     75
 mexicano   | mushroom   |     50
 mexicano   | chilli     |     25
 mexicano   | spice      |     20
 seafood    | seafood    |    200
 seafood    | spice      |      5
 garlic     | garlic     |     25
 garlic     | spice      |     10
 vegetarian | onion      |     50
 vegetarian | capsicum   |     50
 vegetarian | mushroom   |     50
 vegetarian | peas       |     50
 vegetarian | tomato     |     50
 vegetarian | spice      |      5
 mushroom   | mushroom   |    100
 mushroom   | spice      |      5
 special    | cheese     |     25
 special    | tomato     |     25
 special    | ham        |     25
 special    | anchovies  |     25
 special    | olives     |     25
 special    | mushroom   |     25
 special    | bacon      |     25
 special    | egg        |     25
 special    | pineapple  |     25
 special    | cabanossi  |     25
 special    | salami     |     25
 special    | capsicum   |     25
 special    | onion      |     25
 special    | peas       |     25
 special    | seafood    |     25
 special    | spice      |     10
 stagiony   | ham        |     75
 stagiony   | mushroom   |     50
 stagiony   | olives     |     50
 stagiony   | anchovies  |     25
 stagiony   | spice      |     10

ほとんどの材料を使っているピザの名前を知る必要がありました。そして答えは、 count( )> = all(ピザによるレシピグループからcount()を選択)を持つピザによってレシピグループからピザを選択することです。

出力は次のとおりです。

ピザ

スペシャル(1行)

4

4 に答える 4

6

...最大数の材料

次のクエリは、すべてのピザとその材料の総数を一覧表示します。LIMIT 1材料の数が最も多いピザを表示したい場合は追加します。

SELECT pizza, COUNT(*) totalIngredients
FROM tableName
GROUP BY pizzaList
ORDER BY totalIngredients DESC
-- LIMIT 1

SQLFiddleデモ

ただし、このクエリでは問題が発生します。2つのピザが最大数の材料を共有している場合、並べ替え順序の最初のピザのみが表示されます。すべてのピザを一番上に表示するには、以下に示すコードを使用します。

SELECT pizza, COUNT(*) totalIngredients
FROM pizzaList
GROUP BY pizza
HAVING COUNT(*) = 
(
  SELECT MAX(totalCount)
  FROM
  (
    SELECT  COUNT(*) totalCount
    FROM    pizzaList
    GROUP BY pizza
  ) x
)

SQLFiddleデモ

于 2012-09-27T01:47:17.570 に答える
0

それはそのようになります:

SELECT pizza, COUNT(pizza) AS ingredientcount FROM pizzas GROUP BY pizza ORDER BY ingredientcount DESC LIMIT 1;
于 2012-09-27T01:48:03.207 に答える
0

あなたの質問への答えは、いくつかのことに依存します。全体的に最大量の成分が必要ですか、それともさまざまな成分の最大数が必要ですか。また、最初のリストだけが必要ですか、それとも順番にリストが必要ですか?

まず、トッピングの全体量が必要であると仮定しましょう。このクエリは次のとおりです。

SELECT TOP (1) Pizza, sum(amount) as TotalAmount
FROM PizzaTable
GROUP BY Pizza
ORDER BY sum(amount) DESC

一番上の行以上のものを取得するには、 を削除しTOP (1)ます。

ここで、合計量ではなく、材料の数が必要であると仮定しましょう。このクエリは次のようになります。

SELECT TOP (1) Pizza, count(*) as NumberOfIngredients
FROM PizzaTable
GROUP BY Pizza
ORDER BY count(*) DESC

TOP (1)繰り返しますが、単一のエントリではなくリストを削除します。

于 2012-09-27T01:57:21.217 に答える
0

がその成分amountの量であり、成分の最大数 (すなわち量) を意味すると仮定します。

SELECT pizza
FROM tableName
GROUP BY pizza
ORDER BY SUM(amount) DESC
LIMIT 1

代わりに、異なる成分の最大数(つまり、固有の成分の数) を意味する場合:

SELECT pizza
FROM tableName
GROUP BY pizza
ORDER BY COUNT(ingredient) DESC
LIMIT 1

DISTINCT特定のピザで同じ材料が 2 回リストされる可能性がある場合は、カウントに a を追加する必要がある場合があります。

于 2012-09-27T01:50:19.727 に答える