2017-07-16 5 views
1

ユーザーID、ユーザー名、合計金額、割引後に支払う金額を表示し、別名をUser_ID、user_name、Total_amount、Paid_amountとして表示します。ユーザーIDごとに降順でレコードを表示します。テーブルを取得するにはTABLE SHCEMAをクリックしてください次の出力を生成するSQLクエリ

これは私が書いたコードです。

SELECT 
    USERS.USER_ID AS User_ID, 
    NAME AS user_name, 
    (FARE * NO_SEATS) AS Total_amount 
FROM 
    USERS 
INNER JOIN 
    TICKETS ON USERS.USER_ID = TICKETS.USER_ID 
INNER JOIN 
    PAYMENTS ON TICKETS.TICKET_ID = PAYMENTS.TICKET_ID 
INNER JOIN 
    DISCOUNTS ON PAYMENTS.DISCOUNT_ID = DISCOUNTS.DISCOUNT_ID 
GROUP BY 
    USERS.USER_ID, NAME, FARE, NO_SEATS 
ORDER BY 
    USERS.USER_ID DESC; 

これは、予想される出力は次のとおりです:

USER_ID USER_NAME TOTAL_AMOUNT PAID_AMOUNT 
---------------------------------------------- 
5  Krena   700   625 
4  Johan   800   775 
3  Ivan   3000  2900 
1  John   4000  3950 
1  John   4000  3950 
1  John   2000  1900 
+0

[DBMS](https://en.wikipedia.org/wiki/Database)はどちらを使用していますか? Postgres?オラクル? DB2?ファイアバード? –

答えて

0

これは動作しますが、それを試してみてください

SELECT 
USERS.USER_ID AS USER_ID, 
USERS.NAME AS USER_NAME, 
(TICKETS.FARE * TICKETS.NO_SEATS) AS TOTAL_AMOUNT, 
(TICKETS.FARE * TICKETS.NO_SEATS - DISCOUNTS.DISCOUNT_AMOUNT) AS PAID_AMOUNT 
FROM 
USERS 
INNER JOIN TICKETS 
     ON USERS.USER_ID=TICKETS.USER_ID 
INNER JOIN PAYMENTS 
     ON TICKETS.TICKET_ID=PAYMENTS.TICKET_ID 
INNER JOIN DISCOUNTS 
     ON PAYMENTS.DISCOUNT_ID=DISCOUNTS.DISCOUNT_ID 
ORDER BY USERS.USER_ID DESC; 
+1

ありがとうメイト。これはかろうじて働いた –

0

このコードを試してみてくださいしかし、これは期待される結果を示していません。

SELECT 
USERS.USER_ID AS USER_ID, 
USERS.NAME AS USER_NAME, 
(TICKETS.FARE * TICKETS.NO_SEATS) AS TOTAL_AMOUNT, 
(TICKETS.FARE * DISCOUNTS.DISCOUNT_AMOUNT) + TICKETS.FARE AS PAID_AMOUNT 
FROM 
USERS USERS 
INNER JOIN TICKETS TICKETS 
     ON USERS.USER_ID=TICKETS.USER_ID 
INNER JOIN PAYMENTS PAYMENTS 
     ON TICKETS.TICKET_ID=PAYMENTS.TICKET_ID 
INNER JOIN DISCOUNTS DISCOUNTS 
     ON PAYMENTS.DISCOUNT_ID=DISCOUNTS.DISCOUNT_ID 
ORDER BY USERS.USER_ID DESC; 

なぜそれが数値データ型である場合、私はあなたのデータベース構造で混乱していますか?あなたが望むならばそれを10進数に変更し、あなたの割引テーブルの割引額がパーセンテージであると仮定してその長さを(11,2)としたいかもしれませんか?またはサンプルデータベースをここに貼り付けるだけで、コードを更新できます。

+0

割引額はパーセンテージではなく、最初の3つの列の正確な出力を得ています。割引列の正確なコードは何でしょうか? @ G.Panga –

+0

あなたの運賃からディスカウントを差し引くだけならば、 "(TICKETS.FARE * DISCOUNTS.DISCOUNT_AMOUNT)+ TICKETS.FARE AS PAID_AMOUNT"を "(DISCOUNTS.DISCOUNT_AMOUNT - TICKETS.FARE)AS PAID_AMOUNT"に変更してください –

0

もし私が十分な評判を得ていれば、私はこれをコメント(一口)として書いたでしょう:

私は次のことを前提としています

  • プリントユーザーのための総和、両方TOTAL_AMOUNT(すなわち公式価格。)、(割引後すなわち。)Paid_amount、それはすべてのチケットが含まれており、そのう支払い。私は割引が公正から控除される正の数であると、これはトリックを行う必要があります1席

あたりにあることを前提としてい

  • SELECT 
        USER_ID AS USER_ID, 
        NAME AS USER_NAME, 
        sum(FARE * NO_SEATS) AS TOTAL_AMOUNT, 
        sum((FARE - DISCOUNT_AMOUNT) * NO_SEATS) AS PAID_AMOUNT 
    FROM USERS u 
    INNER JOIN TICKETS t 
         ON u.USER_ID=t.USER_ID 
    INNER JOIN PAYMENTS p 
         ON t.TICKET_ID=p.TICKET_ID 
    INNER JOIN DISCOUNTS d 
         ON p.DISCOUNT_ID=d.DISCOUNT_ID 
    group by USER_ID, name 
    ORDER BY USER_ID DESC; 
    
  • 関連する問題