テーブルが2つあります。アーカイブはテーブルであり、もう1つは現在のレコードを保持している点が異なります。これらは、会社の売上を記録するテーブルです。どちらにも、ID、名前、販売価格などのフィールドがあります。両方のテーブルから、名前の最高値と最低値を選択する必要があります。私はクエリでやろうとしました:
select name, max (price_of_sale), min (price_of_sale)
from wapzby
union
select name, max (price_of_sale), min (price_of_sale)
from wpzby
order by name
しかし、そのような問い合わせは2つのレコードを引き出します-現在のテーブルの1つと1つのテーブルのアーカイブ。両方のテーブルからすぐに最小価格と最大価格の名前を選択したいと思います。このクエリを取得するにはどうすればよいですか?
2つのオプションがあります(MSSql準拠)
注:UNION ALLは、重複を排除せずにセットを結合します。これはUNIONよりもはるかに単純な動作です。
SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice
FROM
(
SELECT Name, Price_Of_Sale
FROM wapzby
UNION ALL
SELECT Name, Price_Of_Sale
FROM wpzby
) as subQuery
GROUP BY Name
ORDER BY Name
これは、セットを組み合わせる前に各テーブルから最大値と最小値を計算します。この方法で行う方がパフォーマンスが向上する場合があります。
SELECT Name, MAX(MaxPrice) as MaxPrice, MIN(MinPrice) as MinPrice
FROM
(
SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice
FROM wapzby
GROUP BY Name
UNION ALL
SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice
FROM wpzby
GROUP BY Name
) as subQuery
GROUP BY Name
ORDER BY Name
SQL Serverでは subquery を使用できます。
SELECT [name],
MAX([price_of_sale]) AS [MAX price_of_sale],
MIN([price_of_sale]) AS [MIN price_of_sale]
FROM (
SELECT [name],
[price_of_sale]
FROM [dbo].[wapzby]
UNION
SELECT [name],
[price_of_sale]
FROM [dbo].[wpzby]
) u
GROUP BY [name]
ORDER BY [name]
これはあなたが望むものに似ていますか?
SELECT
a.name,
MAX (a.price_of_sale),
MIN (a.price_of_sale) ,
b.name,
MAX (b.price_of_sale),
MIN (b.price_of_sale)
FROM
wapzby a,
wpzby b
ORDER BY
a.name
テストされていませんが、ユニオンを必要とせずにすべてのレコードを1行で返す必要があります
SELECT MAX(value) FROM tabl1 UNION SELECT MAX(value) FROM tabl2;
SELECT MIN(value) FROM tabl1 UNION SELECT MIN(value) FROM tabl2;