2017-07-16 72 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;