クレイジーな答えを求めてグーグルで試しましたが、これを解決できなかったので、誰かが助けてくれることを願っています。
ユーザーのテーブル、非常に単純なテーブルがあるとします。
id | userName
3 Michael
4 Mike
5 George
そして私は彼らの車と価格の別の表を持っています。
id | belongsToUser | carPrice
1 4 5000
2 4 6000
3 4 8000
今、私がする必要があるのは、このようなものです(自由に書き換えてください):
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN `cars`
ON cars.belongsToUser=users.id
WHERE `id`='4'
返されるもの:
Mike | 5000
しかし、最初のエントリではなく、特定のユーザーの最も高価な車が必要です。
そこで質問:carPrice、DESCが注文するLEFT JOINテーブルを設定するにはどうすればよいですか?
GROUP BY
でMAX
を使用してみてください。
SELECT u.userName, MAX(c.carPrice)
FROM users u
LEFT JOIN cars c ON u.id = c.belongsToUser
WHERE u.id = 4;
GROUP BY u.userName;
GROUP BY
に関する詳細情報Group by句は、group by列の一意の組み合わせに基づいて、選択したレコードをグループに分割するために使用されます。これにより、レコードの各グループに順番に適用される集計関数(MAX、MIN、SUM、AVGなど)を使用できます。データベースは、グループごとに1つの結果レコードを返します。
たとえば、次のような表に時間と場所の温度を表すレコードのセットがある場合:
Location Time Temperature
-------- ---- -----------
London 12:00 10.0
Bristol 12:00 12.0
Glasgow 12:00 5.0
London 13:00 14.0
Bristol 13:00 13.0
Glasgow 13:00 7.0
...
次に、場所ごとに最高温度を検索する場合は、温度レコードをグループ分けして、特定のグループの各レコードが同じ場所にあるようにする必要があります。次に、各グループの最高温度を求めます。これを行うためのクエリは次のようになります。
SELECT Location, MAX(Temperature)
FROM Temperatures
GROUP BY Location;
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN (SELECT * FROM `cars` ORDER BY `carPrice`) as `cars`
ON cars.belongsToUser=users.id
WHERE `id`='4'
他のいくつかの答えは、MAXを使用したソリューションを提供します。いくつかのシナリオでは、集計関数を使用することは可能ではないか、パフォーマンスがありません。
私がよく使う代替策は、結合で相関サブクエリを使用することです...
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN `cars`
ON cars.id = (
SELECT id FROM `cars` WHERE BelongsToUser = users.id ORDER BY carPrice DESC LIMIT 1
)
WHERE `id`='4'
これにより、ユーザーにとって最も高価な車が得られます。
SELECT users.userName, MAX(cars.carPrice)
FROM users
LEFT JOIN cars ON cars.belongsToUser=users.id
WHERE users.id=4
GROUP BY users.userName
ただし、このステートメントにより、すべての車の価格を降順で並べ替えたいと思うようになります。
そこで質問:carPrice、DESCが注文するLEFT JOINテーブルを設定するにはどうすればよいですか?
だからあなたはこれを試すことができます:
SELECT users.userName, cars.carPrice
FROM users
LEFT JOIN cars ON cars.belongsToUser=users.id
WHERE users.id=4
GROUP BY users.userName
ORDER BY users.userName ASC, cars.carPrice DESC
これを試してください:
SELECT
`userName`,
`carPrice`
FROM `users`
LEFT JOIN `cars`
ON cars.belongsToUser=users.id
WHERE `id`='4'
ORDER BY `carPrice` DESC
LIMIT 1
フェリックス