2016-10-18 11 views
2

私は、乗客のリストとその荷物の重量を持つデータベースを持っています。一人ひとりのユニークな乗客とその荷物の総重量を表示する必要があります(乗客は1つ以上の荷物を入れることができます)。次のように仕事をdoesntのSQL: "ORDER BY"と "GROUP BY"を一緒に使うには?

私の現在のソリューションは、次のとおりです。あなただけの重みを合計するよう

SELECT PassengerID, Weight 
FROM Baggage 
GROUP BY PassengerID 
ORDER BY Weight DESC; 
+0

select節に集約関数を含まないgroup by節は推奨されなくなり、最終的には廃止されることに注意してください。 –

+0

@TGray、廃止予定?誰によると?いつから? – jarlh

+0

@jarlh 5.6以降のバージョンでは、非集約グループ・バイ・ゼロ日付のようなものを許可するには、厳密なSQLモードをオフにする必要があります。 –

答えて

2

サウンズ:

SELECT PassengerID, SUM(Weight) AS TotalWeight 
FROM Baggage 
GROUP BY PassengerID 
ORDER BY SUM(Weight) DESC; 
+1

代わりに 'ORDER BY TotalWeight DESC'を実行します。 – jarlh

+0

@jarlh - 標準SQLでは列エイリアスでは注文できません。代わりに式を使用する必要があります。特定のDB(私があなたを見ているMySQL)がここで標準を破ってそれを許可するかどうかはわかりません。 – Donnie

+0

@Donnie、もちろんANSI SQLでは列別名で注文することができます。 – jarlh

0

あなたがして、GROUPで行くことに集約関数を必要とします - この場合にはSUM次のようになります -

SELECT 
    PassengerID, 
    SUM(Weight) 
FROM Baggage 
GROUP BY PassengerID 
ORDER BY SUM(Weight) DESC; 
+0

ORDER BYが無効です。重量はそこでは使用できません。 – jarlh

+0

注目 - なぜ私はそれを逃した –

0
SELECT passenger_Name, SUM(weight) AS 'Total Weight' 
FROM baggage 
GROUP BY passenger_name 
ORDER BY 'Total Weight' DESC;