如何计算和比较同一列中的值 table
How to count and compare value of colume in the same table
我需要创建一个程序,通过 'P' 和 'U' 计算状态来计算一个 table 中最差的用户,然后将其与其他用户进行比较,取那个用户id,在另一个table中找到,将两个table中的所有用户信息写入。我从 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,还有一个 U,所以他的比率是 3 P。然后应该去 Korisnik table 和 return 所有信息对于 ID 为 2
的用户
我试了一下,但无法获得任何 return 值
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
您可以使用以下方法让更差的用户使用:
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
这会在一个查询中完成您所描述的您想做的事情。
我需要创建一个程序,通过 'P' 和 'U' 计算状态来计算一个 table 中最差的用户,然后将其与其他用户进行比较,取那个用户id,在另一个table中找到,将两个table中的所有用户信息写入。我从 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,还有一个 U,所以他的比率是 3 P。然后应该去 Korisnik table 和 return 所有信息对于 ID 为 2
的用户我试了一下,但无法获得任何 return 值
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
您可以使用以下方法让更差的用户使用:
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
这会在一个查询中完成您所描述的您想做的事情。