如何在同一个表中计算和比较colume的值

时间:2015-06-09 22:48:47

标签: mysql sql stored-procedures

我需要创建一个程序,通过计算“P”和“U”计算比率的状态来找到一个表中最差的用户,然后将其与其他用户进行比较,获取该用户ID并在另一个表中找到它并写入所有两个表中的用户信息。我从java应用程序调用该过程。

Table Rezervacija
id | SifKorisnikPK | Status
1  |   1           | 'P'
2  |   1           | 'U'
3  |   1           | 'U'
4  |   2           | 'U'
5  |   2           | 'P'
6  |   2           | 'P'
7  |   2           | 'P'
8  |   2           | 'P'
9  |   3           | 'U'
10 |   3           | 'U'
11 |   3           | 'P'
12 |   3           | 'P'
13 |   3           | 'P'
14 |   3           | 'P'

因此,id为2的用户是最差的用户,因为4 P和1 U,所以他的比例是3 P.然后它应该去Korisnik表并返回id为2的用户的所有信息

我尝试使用此功能但无法获得任何返回值

CREATE PROCEDURE sp_getBadPremiumUsers 
AS
BEGIN
    DECLARE @BrLr int
    DECLARE @BrDr int

    SELECT @BrLr = (SELECT COUNT(*) FROM Rezervacija A
    INNER JOIN Rezervacija B
    ON A.SifKorisnikPK = B.SifKorisnikPK
    WHERE A.Status = 'P')

    SELECT @BrDr = (SELECT COUNT(*) FROM Rezervacija A
    INNER JOIN Rezervacija B
    ON A.SifKorisnikPK = B.SifKorisnikPK
    WHERE A.Status = 'U')

    SELECT * INTO #PremiKoris FROM Korisnik
    INNER JOIN PremiumKorisnik
    ON SifKorisnik = SifKorisnikPK
    ALTER TABLE #PremiKoris 
    DROP COLUMN Password
    SELECT * FROM #PremiKoris 
    WHERE @BrLr > @BrDr

    DROP TABLE #PremiKoris
END
GO

1 个答案:

答案 0 :(得分:0)

您可以使用以下方式来吸引更糟糕的用户:

select r.SifKorisnikPK
from Rezervacija r
where status = 'P'
group by SifKorisnikPK
order by count(*) desc
limit 1;

然后,您可以在查询中使用它来获取更多信息:

select k.*
from PremiumKorisnik k join
     (select r.SifKorisnikPK
      from Rezervacija r
      where status = 'P'
      group by SifKorisnikPK
      order by count(*) desc
      limit 1
     ) r
     on r.SifKorisnikPK = k.SifKorisnikPK

这会在一个查询中执行您要描述的内容。