![](/img/trans.png)
[英]Get rows in one table that are not in other based on two columns in oracle sql
[英]SQL query to get only rows match the condition based on two separated columns under one 'group by'
簡單的SELECT查詢將返回如下數據:
從數據中選擇ID,用戶,國家/地區,時間記錄
ID User Country TimeLogged
1 Samantha SCO 10
1 John UK 5
1 Andrew NZL 15
2 John UK 20
3 Mark UK 10
3 Mark UK 20
3 Steven UK 10
3 Andrew NZL 15
3 Sharon IRL 5
4 Andrew NZL 25
4 Michael AUS 5
5 Jessica USA 30
我想返回按ID分組的每個用戶的登錄時間總和,但僅返回ID編號,其中這兩個值Country = UK
和User = Andrew
都包含在其行中。
因此,上面示例中的輸出為
ID User Country TimeLogged
1 John UK 5
1 Andrew NZL 15
3 Mark UK 30
3 Steven UK 10
3 Andrew NZL 15
首先,您需要確定要返回的ID
SELECT ID FROM MyTable WHERE Country='UK'
INTERSECT
SELECT ID FROM MyTable WHERE [User]='Andrew';
然后,您可以基於此進行過濾以匯總預期的行。
SELECT ID,
[User],
Country,
SUM(Timelogged) as Timelogged
FROM mytable
WHERE (Country='UK' OR [User]='Andrew')
AND ID IN( SELECT ID FROM MyTable WHERE Country='UK'
INTERSECT
SELECT ID FROM MyTable WHERE [User]='Andrew')
GROUP BY ID, [User], country;
因此,您已經描述了幾乎完美但不太准確的內容。 您的結果表表明您要使用國家/地區=英國或用戶=安德魯,而不是AND
您需要選擇並分組,然后在其中添加:
Select ID, User, Country, SUM(Timelogged) as Timelogged from mytable
WHERE Country='UK' OR User='Andrew'
Group by ID, user, country
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.