2017-07-16 29 views
1

顯示用戶標識,用戶名,總金額,折扣後要支付的金額並將別名命名爲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; 

我很困惑你的數據庫結構,如果它爲什麼是數字數據類型?您可能想要將其更改爲十進制,如果您需要並將其長度設爲(11,2),因爲我假設您的折扣表中的折扣金額以百分比爲準?或者在這裏粘貼你的示例數據庫,這樣我就可以更新我的代碼。

+0

折扣的金額不在百分比,我得到的前三列除了最後一個精確的輸出。折扣列的確切代碼是什麼? @ G.Panga –

+0

如果您只是從FARE中扣除折扣,請務必將「(TICKETS.FARE * DISCOUNTS.DISCOUNT_AMOUNT)+ TICKETS.FARE作爲PAID_AMOUNT」更改爲「(DISCOUNTS.DISCOUNT_AMOUNT - TICKETS.FARE)作爲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;