2009-07-30 10 views
0

私は、クエリを持っている:クエリ別の行に同じ数

Select n_portions, dish_name 
from food_order, dish 
where n_portions= 
(select max (n_portions) 
FROM food_order); 

返すためのものです:

fish pie 3 
steak and chips 1 
pasta bake 2 
stuffed peppers 1 

しかし、私は得る:

Pasta bake  35 
Fish pie  35 
Steak and chips 35 
Stuffed peppers 35 
Ham and rice 35 
Lamb curry  35 

なぜこれがありますハッピング?

table data 
table data 
Insert into customer_order values ('00001', '03-Apr-09', '07-apr-09','St. Andrew St'); 
Insert into customer_order values ('00002', '05-Apr-09', '01-May-09', 'St. Andrew St'); 
Insert into customer_order values ('00003', '12-Apr-09', '27-Apr-09', 'Union St'); 
Insert into customer_order values ('00004', '12-Apr-09', '17-Apr-09', 'St. Andrew St'); 

Insert into Dish values ('D0001', 'Pasta bake',  'yes', '6.00'); 
Insert into Dish values ('D0002', 'Fish pie',  'no', '9.00'); 
Insert into Dish values ('D0003', 'Steak and chips', 'no', '14.00'); 
Insert into Dish values ('D0004', 'Stuffed peppers', 'yes', '11.50'); 
Insert into Dish values ('D0005', 'Ham and rice' , 'no', '7.25'); 
Insert into Dish values ('D0006', 'Lamb curry'  , 'no', '8.50'); 

Insert into Drink values ('DR0001', 'Water', 'soft',  '1.0'); 
Insert into Drink values ('DR0002', 'Coffee', 'hot',  '1.70'); 
Insert into Drink values ('DR0003', 'Wine' , 'alcoholic', '3.00'); 
Insert into Drink values ('DR0004', 'Beer' , 'alcoholic', '2.30'); 
Insert into Drink values ('DR0005', 'Tea' , 'hot'  , '1.50'); 

Insert into food_order values ('F000001', '000001', 'D0003', '6'); 
Insert into food_order values ('F000002', '000001', 'D0001', '4'); 
Insert into food_order values ('F000003', '000001', 'D0004', '3'); 
Insert into food_order values ('F000004', '000002', 'D0001', '10'); 
Insert into food_order values ('F000005', '000002', 'D0002', '10'); 
Insert into food_order values ('F000006', '000003', 'D0002', '35'); 
Insert into food_order values ('F000007', '000004', 'D0002', '23'); 

Insert into drink_order values ('D000001', '000001', 'DR0001', '13'); 
Insert into drink_order values ('D000002', '000001', 'DR0002', '13'); 
Insert into drink_order values ('D000003', '000001', 'DR0004', '13'); 
Insert into drink_order values ('D000004', '000002', 'DROOO1', '20'); 
Insert into drink_order values ('D000005', '000002', 'DR0003', '20'); 
Insert into drink_order values ('D000006', '000002', 'DR0004', '15'); 
Insert into drink_order values ('D000007', '000003', 'DR0002', '35'); 
Insert into drink_order values ('D000008', '000004', 'DR0001', '23'); 
Insert into drink_order values ('D000009', '000004', 'DR0003', '15'); 
Insert into drink_order values ('D0000010', '000004', 'DR0004', '15'); 
+0

これが動作しない動作しませんでしたhttp://stackoverflow.com/questions/1207241/problem-with-sql-function – Fredou

答えて

1

"food_order"と "dish"はどのように関連していますか?クエリ内の2つのテーブルの間に関係を指定するようには思われません.....各ディッシュの最大値が必要な場合は、そのディッシュの値を最大値にする必要があります。テーブル内のすべてのエントリの最大値。あなたが副選択でfood_orderの最大n_portionsにn_portionsの値を設定している

Select 
    n_portions, dish_name 
from 
    food_order, dish 
where 
    n_portions = 
    (select max (n_portions) FROM food_order f2 WHERE f2.dish# = dish.dish#) 
0

ジャスト(知らずに)ここで仮定して、あなたはおそらくのようなものを必要としています。

(すべてではなく)それぞれのためにmaxを取得しようとするなら、n_portionsの数とdish_nameでグループ化する必要があります。また、あなたはfood_orderと料理との間の結合を欠いています。

0
select dish_name, max(n_portions) 
from  food_order f 
inner join dish  d on d.dish_id = f.dish_id 
+0

にリンク –

0

あなたは代わりに、サブクエリのことで参加し、集計/グループを使用することができます。

SELECT MAX(n_portions), dish_name 
FROM food_order 
INNER JOIN dish ON (food_order.dish = dish.dish) --guessing a bit here 
GROUP BY dish_name 
0

問題は何もサブで食品_順序と料理の間の結合が存在しないという事実から生じます選択します。したがって、常にfood_orderのn_maxの最大値を返すだけで、毎回同じ値になります。

提供された情報から、あなたが探しているものを正確に言うのは難しいですが、サブ選択(いくつかのフィルタを選択する必要があります)について言えば十分です。以下のような何か...

Select fo.n_portions, d.dish_name 
from food_order fo, dish d 
where fo.n_portions= 
(select max (n_portions) 
FROM food_order fo where food_order.dish_id = d.dish_id); 
関連する問題