SQL Nested COUNT for gurus
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
Current code:
SELECT "conversation"."id", "conversation"."title", "conversation"."deleted", "conversation"."created_at", (
SELECT COUNT("currentUserConversations->messageReceivers"."id")
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id" AND "currentUserConversations->messageReceivers"."read" = false
WHERE "currentUserConversations"."user_id" = 7
) AS "unreadM"
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "otherUserConversations" ON "conversation"."id" = "otherUserConversations"."conversation_id"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id"
WHERE "currentUserConversations"."user_id" = 7
AND "otherUserConversations"."user_id" = '4'
GROUP BY "conversation"."id";
My Tables:
- Conversations
- UserConversation
- MessageReceiver
Relationships:
- N
UserConversation
perConversations
- 1
MessageReceiver
perUserConversation
What I'm trying to accomplish:
MessageReceiver
has aread
column
MessageReceiver
.read
can be true/false- for the given query (everything outside the nested query) I want to count how many MessageReceivers has the
read
column set asfalse
(and return it in the main query aliased asunreadM
)
What's currently happening:
The nested query count all the MessageReceivers, even if they have the read
propriety set to true
...
Using PostgreSQL dialect.
If possible I would appreciate an approach that doesn't changes the "FROM". I also need to be able to filter the outer query to (conditionally, not in sql, but from express, generating the query based on external conditions) only retrieve conversations where there is atleast 1 unread message ("currentUserConversations->messageReceivers"."read" = false
)
My brain is exploding, if anyone has a solution and an explanation I would really much appreciate it!
Expected Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "0"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Returned Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "4"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Sample Data:
UserConversation
id|conversation_id|user_id|deleted|admin
1|10|1|f|f
2|10|10|f|f
3|9|2|f|f
4|9|9|f|f
5|8|3|f|f
6|8|8|f|f
8|7|7|f|f
10|6|6|f|f
11|5|6|f|f
12|5|5|f|f
13|4|7|f|f
14|4|4|f|f
15|3|8|f|f
16|3|3|f|f
17|2|9|f|f
18|2|2|f|f
19|1|10|f|f
20|1|1|f|f
7|7|4|f|f
9|6|7|f|f
MessageReceiver:
id|user_conversation_id|message_id|read
1|1|1|t
2|1|2|t
3|1|3|t
4|1|4|t
5|2|5|t
6|2|6|t
7|2|7|t
8|2|8|t
9|3|9|t
10|3|10|t
11|3|11|t
12|3|12|t
17|5|17|t
18|5|18|t
19|5|19|t
20|5|20|t
21|6|21|t
22|6|22|t
23|6|23|t
24|6|24|t
29|8|29|f
30|8|30|f
31|8|31|f
32|8|32|f
33|9|33|t
34|9|34|t
35|9|35|t
36|9|36|t
37|10|37|t
38|10|38|t
39|10|39|t
40|10|40|t
41|11|41|t
42|11|42|t
43|11|43|t
44|11|44|t
45|12|45|f
46|12|46|f
47|12|47|f
48|12|48|f
49|13|49|t
50|13|50|t
51|13|51|t
52|13|52|t
53|14|53|t
54|14|54|t
55|14|55|t
56|14|56|t
57|15|57|t
58|15|58|t
59|15|59|t
60|15|60|t
61|16|61|f
62|16|62|f
63|16|63|f
64|16|64|f
65|17|65|t
66|17|66|t
67|17|67|t
68|17|68|t
69|18|69|t
70|18|70|t
71|18|71|t
72|18|72|t
73|19|73|t
74|19|74|t
75|19|75|t
76|19|76|t
77|20|77|f
78|20|78|f
79|20|79|f
80|20|80|f
25|7|25|t
26|7|26|t
14|4|14|t
13|4|13|t
16|4|16|t
15|4|15|t
27|7|27|t
28|7|28|t
Conversations:
id|title|deleted|created_at
1|automaticSeeded title ijmmg|f|2018-11-26 13:24:33.766355+01
2|automaticSeeded title xdjiy|f|2018-11-26 13:24:33.766355+01
3|automaticSeeded title bmvpv|f|2018-11-26 13:24:33.766355+01
4|automaticSeeded title shvrn|f|2018-11-26 13:24:33.766355+01
5|automaticSeeded title yjvai|f|2018-11-26 13:24:33.766355+01
6|automaticSeeded title ubzab|f|2018-11-26 13:24:33.766355+01
7|automaticSeeded title viowy|f|2018-11-26 13:24:33.766355+01
8|automaticSeeded title ecthq|f|2018-11-26 13:24:33.766355+01
9|automaticSeeded title tzotl|f|2018-11-26 13:24:33.766355+01
10|automaticSeeded title fakjf|f|2018-11-26 13:24:33.766355+01
sql postgresql count nested
|
show 1 more comment
Current code:
SELECT "conversation"."id", "conversation"."title", "conversation"."deleted", "conversation"."created_at", (
SELECT COUNT("currentUserConversations->messageReceivers"."id")
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id" AND "currentUserConversations->messageReceivers"."read" = false
WHERE "currentUserConversations"."user_id" = 7
) AS "unreadM"
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "otherUserConversations" ON "conversation"."id" = "otherUserConversations"."conversation_id"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id"
WHERE "currentUserConversations"."user_id" = 7
AND "otherUserConversations"."user_id" = '4'
GROUP BY "conversation"."id";
My Tables:
- Conversations
- UserConversation
- MessageReceiver
Relationships:
- N
UserConversation
perConversations
- 1
MessageReceiver
perUserConversation
What I'm trying to accomplish:
MessageReceiver
has aread
column
MessageReceiver
.read
can be true/false- for the given query (everything outside the nested query) I want to count how many MessageReceivers has the
read
column set asfalse
(and return it in the main query aliased asunreadM
)
What's currently happening:
The nested query count all the MessageReceivers, even if they have the read
propriety set to true
...
Using PostgreSQL dialect.
If possible I would appreciate an approach that doesn't changes the "FROM". I also need to be able to filter the outer query to (conditionally, not in sql, but from express, generating the query based on external conditions) only retrieve conversations where there is atleast 1 unread message ("currentUserConversations->messageReceivers"."read" = false
)
My brain is exploding, if anyone has a solution and an explanation I would really much appreciate it!
Expected Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "0"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Returned Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "4"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Sample Data:
UserConversation
id|conversation_id|user_id|deleted|admin
1|10|1|f|f
2|10|10|f|f
3|9|2|f|f
4|9|9|f|f
5|8|3|f|f
6|8|8|f|f
8|7|7|f|f
10|6|6|f|f
11|5|6|f|f
12|5|5|f|f
13|4|7|f|f
14|4|4|f|f
15|3|8|f|f
16|3|3|f|f
17|2|9|f|f
18|2|2|f|f
19|1|10|f|f
20|1|1|f|f
7|7|4|f|f
9|6|7|f|f
MessageReceiver:
id|user_conversation_id|message_id|read
1|1|1|t
2|1|2|t
3|1|3|t
4|1|4|t
5|2|5|t
6|2|6|t
7|2|7|t
8|2|8|t
9|3|9|t
10|3|10|t
11|3|11|t
12|3|12|t
17|5|17|t
18|5|18|t
19|5|19|t
20|5|20|t
21|6|21|t
22|6|22|t
23|6|23|t
24|6|24|t
29|8|29|f
30|8|30|f
31|8|31|f
32|8|32|f
33|9|33|t
34|9|34|t
35|9|35|t
36|9|36|t
37|10|37|t
38|10|38|t
39|10|39|t
40|10|40|t
41|11|41|t
42|11|42|t
43|11|43|t
44|11|44|t
45|12|45|f
46|12|46|f
47|12|47|f
48|12|48|f
49|13|49|t
50|13|50|t
51|13|51|t
52|13|52|t
53|14|53|t
54|14|54|t
55|14|55|t
56|14|56|t
57|15|57|t
58|15|58|t
59|15|59|t
60|15|60|t
61|16|61|f
62|16|62|f
63|16|63|f
64|16|64|f
65|17|65|t
66|17|66|t
67|17|67|t
68|17|68|t
69|18|69|t
70|18|70|t
71|18|71|t
72|18|72|t
73|19|73|t
74|19|74|t
75|19|75|t
76|19|76|t
77|20|77|f
78|20|78|f
79|20|79|f
80|20|80|f
25|7|25|t
26|7|26|t
14|4|14|t
13|4|13|t
16|4|16|t
15|4|15|t
27|7|27|t
28|7|28|t
Conversations:
id|title|deleted|created_at
1|automaticSeeded title ijmmg|f|2018-11-26 13:24:33.766355+01
2|automaticSeeded title xdjiy|f|2018-11-26 13:24:33.766355+01
3|automaticSeeded title bmvpv|f|2018-11-26 13:24:33.766355+01
4|automaticSeeded title shvrn|f|2018-11-26 13:24:33.766355+01
5|automaticSeeded title yjvai|f|2018-11-26 13:24:33.766355+01
6|automaticSeeded title ubzab|f|2018-11-26 13:24:33.766355+01
7|automaticSeeded title viowy|f|2018-11-26 13:24:33.766355+01
8|automaticSeeded title ecthq|f|2018-11-26 13:24:33.766355+01
9|automaticSeeded title tzotl|f|2018-11-26 13:24:33.766355+01
10|automaticSeeded title fakjf|f|2018-11-26 13:24:33.766355+01
sql postgresql count nested
1
Expected result for sample data would help.
– Radim Bača
Nov 26 '18 at 19:37
Added Expected results VS returned results @RadimBača
– Yuri Scarbaci
Nov 26 '18 at 19:45
sample data are missing
– Radim Bača
Nov 26 '18 at 19:46
What kind of sample data you want? tell me and I will deliver (the database is filled with unrelevant data, it's all in development state)
– Yuri Scarbaci
Nov 26 '18 at 19:47
Some data in tables and expected result for this data
– Radim Bača
Nov 26 '18 at 19:48
|
show 1 more comment
Current code:
SELECT "conversation"."id", "conversation"."title", "conversation"."deleted", "conversation"."created_at", (
SELECT COUNT("currentUserConversations->messageReceivers"."id")
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id" AND "currentUserConversations->messageReceivers"."read" = false
WHERE "currentUserConversations"."user_id" = 7
) AS "unreadM"
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "otherUserConversations" ON "conversation"."id" = "otherUserConversations"."conversation_id"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id"
WHERE "currentUserConversations"."user_id" = 7
AND "otherUserConversations"."user_id" = '4'
GROUP BY "conversation"."id";
My Tables:
- Conversations
- UserConversation
- MessageReceiver
Relationships:
- N
UserConversation
perConversations
- 1
MessageReceiver
perUserConversation
What I'm trying to accomplish:
MessageReceiver
has aread
column
MessageReceiver
.read
can be true/false- for the given query (everything outside the nested query) I want to count how many MessageReceivers has the
read
column set asfalse
(and return it in the main query aliased asunreadM
)
What's currently happening:
The nested query count all the MessageReceivers, even if they have the read
propriety set to true
...
Using PostgreSQL dialect.
If possible I would appreciate an approach that doesn't changes the "FROM". I also need to be able to filter the outer query to (conditionally, not in sql, but from express, generating the query based on external conditions) only retrieve conversations where there is atleast 1 unread message ("currentUserConversations->messageReceivers"."read" = false
)
My brain is exploding, if anyone has a solution and an explanation I would really much appreciate it!
Expected Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "0"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Returned Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "4"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Sample Data:
UserConversation
id|conversation_id|user_id|deleted|admin
1|10|1|f|f
2|10|10|f|f
3|9|2|f|f
4|9|9|f|f
5|8|3|f|f
6|8|8|f|f
8|7|7|f|f
10|6|6|f|f
11|5|6|f|f
12|5|5|f|f
13|4|7|f|f
14|4|4|f|f
15|3|8|f|f
16|3|3|f|f
17|2|9|f|f
18|2|2|f|f
19|1|10|f|f
20|1|1|f|f
7|7|4|f|f
9|6|7|f|f
MessageReceiver:
id|user_conversation_id|message_id|read
1|1|1|t
2|1|2|t
3|1|3|t
4|1|4|t
5|2|5|t
6|2|6|t
7|2|7|t
8|2|8|t
9|3|9|t
10|3|10|t
11|3|11|t
12|3|12|t
17|5|17|t
18|5|18|t
19|5|19|t
20|5|20|t
21|6|21|t
22|6|22|t
23|6|23|t
24|6|24|t
29|8|29|f
30|8|30|f
31|8|31|f
32|8|32|f
33|9|33|t
34|9|34|t
35|9|35|t
36|9|36|t
37|10|37|t
38|10|38|t
39|10|39|t
40|10|40|t
41|11|41|t
42|11|42|t
43|11|43|t
44|11|44|t
45|12|45|f
46|12|46|f
47|12|47|f
48|12|48|f
49|13|49|t
50|13|50|t
51|13|51|t
52|13|52|t
53|14|53|t
54|14|54|t
55|14|55|t
56|14|56|t
57|15|57|t
58|15|58|t
59|15|59|t
60|15|60|t
61|16|61|f
62|16|62|f
63|16|63|f
64|16|64|f
65|17|65|t
66|17|66|t
67|17|67|t
68|17|68|t
69|18|69|t
70|18|70|t
71|18|71|t
72|18|72|t
73|19|73|t
74|19|74|t
75|19|75|t
76|19|76|t
77|20|77|f
78|20|78|f
79|20|79|f
80|20|80|f
25|7|25|t
26|7|26|t
14|4|14|t
13|4|13|t
16|4|16|t
15|4|15|t
27|7|27|t
28|7|28|t
Conversations:
id|title|deleted|created_at
1|automaticSeeded title ijmmg|f|2018-11-26 13:24:33.766355+01
2|automaticSeeded title xdjiy|f|2018-11-26 13:24:33.766355+01
3|automaticSeeded title bmvpv|f|2018-11-26 13:24:33.766355+01
4|automaticSeeded title shvrn|f|2018-11-26 13:24:33.766355+01
5|automaticSeeded title yjvai|f|2018-11-26 13:24:33.766355+01
6|automaticSeeded title ubzab|f|2018-11-26 13:24:33.766355+01
7|automaticSeeded title viowy|f|2018-11-26 13:24:33.766355+01
8|automaticSeeded title ecthq|f|2018-11-26 13:24:33.766355+01
9|automaticSeeded title tzotl|f|2018-11-26 13:24:33.766355+01
10|automaticSeeded title fakjf|f|2018-11-26 13:24:33.766355+01
sql postgresql count nested
Current code:
SELECT "conversation"."id", "conversation"."title", "conversation"."deleted", "conversation"."created_at", (
SELECT COUNT("currentUserConversations->messageReceivers"."id")
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id" AND "currentUserConversations->messageReceivers"."read" = false
WHERE "currentUserConversations"."user_id" = 7
) AS "unreadM"
FROM "Conversations" AS "conversation"
INNER JOIN "UserConversation" AS "otherUserConversations" ON "conversation"."id" = "otherUserConversations"."conversation_id"
INNER JOIN "UserConversation" AS "currentUserConversations" ON "conversation"."id" = "currentUserConversations"."conversation_id"
INNER JOIN "MessageReceiver" AS "currentUserConversations->messageReceivers" ON "currentUserConversations"."id" = "currentUserConversations->messageReceivers"."user_conversation_id"
WHERE "currentUserConversations"."user_id" = 7
AND "otherUserConversations"."user_id" = '4'
GROUP BY "conversation"."id";
My Tables:
- Conversations
- UserConversation
- MessageReceiver
Relationships:
- N
UserConversation
perConversations
- 1
MessageReceiver
perUserConversation
What I'm trying to accomplish:
MessageReceiver
has aread
column
MessageReceiver
.read
can be true/false- for the given query (everything outside the nested query) I want to count how many MessageReceivers has the
read
column set asfalse
(and return it in the main query aliased asunreadM
)
What's currently happening:
The nested query count all the MessageReceivers, even if they have the read
propriety set to true
...
Using PostgreSQL dialect.
If possible I would appreciate an approach that doesn't changes the "FROM". I also need to be able to filter the outer query to (conditionally, not in sql, but from express, generating the query based on external conditions) only retrieve conversations where there is atleast 1 unread message ("currentUserConversations->messageReceivers"."read" = false
)
My brain is exploding, if anyone has a solution and an explanation I would really much appreciate it!
Expected Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "0"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Returned Results:
id title deleted created_at unreadM
4 "automaticSeeded title shvrn" false "2018-11-26 13:24:33.766355+01" "4"
7 "automaticSeeded title viowy" false "2018-11-26 13:24:33.766355+01" "4"
Sample Data:
UserConversation
id|conversation_id|user_id|deleted|admin
1|10|1|f|f
2|10|10|f|f
3|9|2|f|f
4|9|9|f|f
5|8|3|f|f
6|8|8|f|f
8|7|7|f|f
10|6|6|f|f
11|5|6|f|f
12|5|5|f|f
13|4|7|f|f
14|4|4|f|f
15|3|8|f|f
16|3|3|f|f
17|2|9|f|f
18|2|2|f|f
19|1|10|f|f
20|1|1|f|f
7|7|4|f|f
9|6|7|f|f
MessageReceiver:
id|user_conversation_id|message_id|read
1|1|1|t
2|1|2|t
3|1|3|t
4|1|4|t
5|2|5|t
6|2|6|t
7|2|7|t
8|2|8|t
9|3|9|t
10|3|10|t
11|3|11|t
12|3|12|t
17|5|17|t
18|5|18|t
19|5|19|t
20|5|20|t
21|6|21|t
22|6|22|t
23|6|23|t
24|6|24|t
29|8|29|f
30|8|30|f
31|8|31|f
32|8|32|f
33|9|33|t
34|9|34|t
35|9|35|t
36|9|36|t
37|10|37|t
38|10|38|t
39|10|39|t
40|10|40|t
41|11|41|t
42|11|42|t
43|11|43|t
44|11|44|t
45|12|45|f
46|12|46|f
47|12|47|f
48|12|48|f
49|13|49|t
50|13|50|t
51|13|51|t
52|13|52|t
53|14|53|t
54|14|54|t
55|14|55|t
56|14|56|t
57|15|57|t
58|15|58|t
59|15|59|t
60|15|60|t
61|16|61|f
62|16|62|f
63|16|63|f
64|16|64|f
65|17|65|t
66|17|66|t
67|17|67|t
68|17|68|t
69|18|69|t
70|18|70|t
71|18|71|t
72|18|72|t
73|19|73|t
74|19|74|t
75|19|75|t
76|19|76|t
77|20|77|f
78|20|78|f
79|20|79|f
80|20|80|f
25|7|25|t
26|7|26|t
14|4|14|t
13|4|13|t
16|4|16|t
15|4|15|t
27|7|27|t
28|7|28|t
Conversations:
id|title|deleted|created_at
1|automaticSeeded title ijmmg|f|2018-11-26 13:24:33.766355+01
2|automaticSeeded title xdjiy|f|2018-11-26 13:24:33.766355+01
3|automaticSeeded title bmvpv|f|2018-11-26 13:24:33.766355+01
4|automaticSeeded title shvrn|f|2018-11-26 13:24:33.766355+01
5|automaticSeeded title yjvai|f|2018-11-26 13:24:33.766355+01
6|automaticSeeded title ubzab|f|2018-11-26 13:24:33.766355+01
7|automaticSeeded title viowy|f|2018-11-26 13:24:33.766355+01
8|automaticSeeded title ecthq|f|2018-11-26 13:24:33.766355+01
9|automaticSeeded title tzotl|f|2018-11-26 13:24:33.766355+01
10|automaticSeeded title fakjf|f|2018-11-26 13:24:33.766355+01
sql postgresql count nested
sql postgresql count nested
edited Nov 26 '18 at 19:55
Yuri Scarbaci
asked Nov 26 '18 at 19:24
Yuri ScarbaciYuri Scarbaci
6551512
6551512
1
Expected result for sample data would help.
– Radim Bača
Nov 26 '18 at 19:37
Added Expected results VS returned results @RadimBača
– Yuri Scarbaci
Nov 26 '18 at 19:45
sample data are missing
– Radim Bača
Nov 26 '18 at 19:46
What kind of sample data you want? tell me and I will deliver (the database is filled with unrelevant data, it's all in development state)
– Yuri Scarbaci
Nov 26 '18 at 19:47
Some data in tables and expected result for this data
– Radim Bača
Nov 26 '18 at 19:48
|
show 1 more comment
1
Expected result for sample data would help.
– Radim Bača
Nov 26 '18 at 19:37
Added Expected results VS returned results @RadimBača
– Yuri Scarbaci
Nov 26 '18 at 19:45
sample data are missing
– Radim Bača
Nov 26 '18 at 19:46
What kind of sample data you want? tell me and I will deliver (the database is filled with unrelevant data, it's all in development state)
– Yuri Scarbaci
Nov 26 '18 at 19:47
Some data in tables and expected result for this data
– Radim Bača
Nov 26 '18 at 19:48
1
1
Expected result for sample data would help.
– Radim Bača
Nov 26 '18 at 19:37
Expected result for sample data would help.
– Radim Bača
Nov 26 '18 at 19:37
Added Expected results VS returned results @RadimBača
– Yuri Scarbaci
Nov 26 '18 at 19:45
Added Expected results VS returned results @RadimBača
– Yuri Scarbaci
Nov 26 '18 at 19:45
sample data are missing
– Radim Bača
Nov 26 '18 at 19:46
sample data are missing
– Radim Bača
Nov 26 '18 at 19:46
What kind of sample data you want? tell me and I will deliver (the database is filled with unrelevant data, it's all in development state)
– Yuri Scarbaci
Nov 26 '18 at 19:47
What kind of sample data you want? tell me and I will deliver (the database is filled with unrelevant data, it's all in development state)
– Yuri Scarbaci
Nov 26 '18 at 19:47
Some data in tables and expected result for this data
– Radim Bača
Nov 26 '18 at 19:48
Some data in tables and expected result for this data
– Radim Bača
Nov 26 '18 at 19:48
|
show 1 more comment
1 Answer
1
active
oldest
votes
It is not completely clear what you are trying to achieve, but your subquery is independent. It means that you will obtain always the same result for all rows in unreadM
.
However, I believe that you want the following
SELECT c."id", c."title", c."deleted", c."created_at",
Count(
CASE WHEN mr."read" = false THEN 1 END
) AS "unreadM"
FROM "Conversations" AS c
INNER JOIN "UserConversation" AS ouc ON c."id" = ouc."conversation_id"
INNER JOIN "UserConversation" AS uc ON c."id" = uc."conversation_id"
INNER JOIN "MessageReceiver" AS mr ON uc."id" = mr."user_conversation_id"
WHERE uc."user_id" = 7
AND ouc."user_id" = 4
GROUP BY c."id";
If you would do count(*) + where read = false
instead of count(case when read = false ...)
then you would lost conversations without unread messages.
Moreover, I would include all the conversation columns that you want in the output into the GROUP BY
list. Just to meet the others DBMS requirements.
...
GROUP BY c."id", c."title", c."deleted", c."created_at";
This worked like a charm, never usedCASE
, could you explain me why it is required and i can't do it with a normal COUNT(column)from ... where read=false ?
– Yuri Scarbaci
Nov 26 '18 at 20:01
FYI, the query as written will not work on postgresql, because postgresql requires all not aggregated fields to be present in the group by clause. i.e. the group by has to beGROUP BY c.id, c.title, c.deleted, c.created_at
– Haleemur Ali
Nov 26 '18 at 20:04
i'm not sure why but it's actually working in my version of postgreSQL, but i'm using a ORM in my project, which mean it could get automatically filled with the relevant group by clausle, I will add the explicit declaration of the group by columns as you specified, thanks a lot!
– Yuri Scarbaci
Nov 26 '18 at 20:11
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53487736%2fsql-nested-count-for-gurus%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
It is not completely clear what you are trying to achieve, but your subquery is independent. It means that you will obtain always the same result for all rows in unreadM
.
However, I believe that you want the following
SELECT c."id", c."title", c."deleted", c."created_at",
Count(
CASE WHEN mr."read" = false THEN 1 END
) AS "unreadM"
FROM "Conversations" AS c
INNER JOIN "UserConversation" AS ouc ON c."id" = ouc."conversation_id"
INNER JOIN "UserConversation" AS uc ON c."id" = uc."conversation_id"
INNER JOIN "MessageReceiver" AS mr ON uc."id" = mr."user_conversation_id"
WHERE uc."user_id" = 7
AND ouc."user_id" = 4
GROUP BY c."id";
If you would do count(*) + where read = false
instead of count(case when read = false ...)
then you would lost conversations without unread messages.
Moreover, I would include all the conversation columns that you want in the output into the GROUP BY
list. Just to meet the others DBMS requirements.
...
GROUP BY c."id", c."title", c."deleted", c."created_at";
This worked like a charm, never usedCASE
, could you explain me why it is required and i can't do it with a normal COUNT(column)from ... where read=false ?
– Yuri Scarbaci
Nov 26 '18 at 20:01
FYI, the query as written will not work on postgresql, because postgresql requires all not aggregated fields to be present in the group by clause. i.e. the group by has to beGROUP BY c.id, c.title, c.deleted, c.created_at
– Haleemur Ali
Nov 26 '18 at 20:04
i'm not sure why but it's actually working in my version of postgreSQL, but i'm using a ORM in my project, which mean it could get automatically filled with the relevant group by clausle, I will add the explicit declaration of the group by columns as you specified, thanks a lot!
– Yuri Scarbaci
Nov 26 '18 at 20:11
add a comment |
It is not completely clear what you are trying to achieve, but your subquery is independent. It means that you will obtain always the same result for all rows in unreadM
.
However, I believe that you want the following
SELECT c."id", c."title", c."deleted", c."created_at",
Count(
CASE WHEN mr."read" = false THEN 1 END
) AS "unreadM"
FROM "Conversations" AS c
INNER JOIN "UserConversation" AS ouc ON c."id" = ouc."conversation_id"
INNER JOIN "UserConversation" AS uc ON c."id" = uc."conversation_id"
INNER JOIN "MessageReceiver" AS mr ON uc."id" = mr."user_conversation_id"
WHERE uc."user_id" = 7
AND ouc."user_id" = 4
GROUP BY c."id";
If you would do count(*) + where read = false
instead of count(case when read = false ...)
then you would lost conversations without unread messages.
Moreover, I would include all the conversation columns that you want in the output into the GROUP BY
list. Just to meet the others DBMS requirements.
...
GROUP BY c."id", c."title", c."deleted", c."created_at";
This worked like a charm, never usedCASE
, could you explain me why it is required and i can't do it with a normal COUNT(column)from ... where read=false ?
– Yuri Scarbaci
Nov 26 '18 at 20:01
FYI, the query as written will not work on postgresql, because postgresql requires all not aggregated fields to be present in the group by clause. i.e. the group by has to beGROUP BY c.id, c.title, c.deleted, c.created_at
– Haleemur Ali
Nov 26 '18 at 20:04
i'm not sure why but it's actually working in my version of postgreSQL, but i'm using a ORM in my project, which mean it could get automatically filled with the relevant group by clausle, I will add the explicit declaration of the group by columns as you specified, thanks a lot!
– Yuri Scarbaci
Nov 26 '18 at 20:11
add a comment |
It is not completely clear what you are trying to achieve, but your subquery is independent. It means that you will obtain always the same result for all rows in unreadM
.
However, I believe that you want the following
SELECT c."id", c."title", c."deleted", c."created_at",
Count(
CASE WHEN mr."read" = false THEN 1 END
) AS "unreadM"
FROM "Conversations" AS c
INNER JOIN "UserConversation" AS ouc ON c."id" = ouc."conversation_id"
INNER JOIN "UserConversation" AS uc ON c."id" = uc."conversation_id"
INNER JOIN "MessageReceiver" AS mr ON uc."id" = mr."user_conversation_id"
WHERE uc."user_id" = 7
AND ouc."user_id" = 4
GROUP BY c."id";
If you would do count(*) + where read = false
instead of count(case when read = false ...)
then you would lost conversations without unread messages.
Moreover, I would include all the conversation columns that you want in the output into the GROUP BY
list. Just to meet the others DBMS requirements.
...
GROUP BY c."id", c."title", c."deleted", c."created_at";
It is not completely clear what you are trying to achieve, but your subquery is independent. It means that you will obtain always the same result for all rows in unreadM
.
However, I believe that you want the following
SELECT c."id", c."title", c."deleted", c."created_at",
Count(
CASE WHEN mr."read" = false THEN 1 END
) AS "unreadM"
FROM "Conversations" AS c
INNER JOIN "UserConversation" AS ouc ON c."id" = ouc."conversation_id"
INNER JOIN "UserConversation" AS uc ON c."id" = uc."conversation_id"
INNER JOIN "MessageReceiver" AS mr ON uc."id" = mr."user_conversation_id"
WHERE uc."user_id" = 7
AND ouc."user_id" = 4
GROUP BY c."id";
If you would do count(*) + where read = false
instead of count(case when read = false ...)
then you would lost conversations without unread messages.
Moreover, I would include all the conversation columns that you want in the output into the GROUP BY
list. Just to meet the others DBMS requirements.
...
GROUP BY c."id", c."title", c."deleted", c."created_at";
edited Nov 26 '18 at 20:26
answered Nov 26 '18 at 19:51
Radim BačaRadim Bača
8,93111226
8,93111226
This worked like a charm, never usedCASE
, could you explain me why it is required and i can't do it with a normal COUNT(column)from ... where read=false ?
– Yuri Scarbaci
Nov 26 '18 at 20:01
FYI, the query as written will not work on postgresql, because postgresql requires all not aggregated fields to be present in the group by clause. i.e. the group by has to beGROUP BY c.id, c.title, c.deleted, c.created_at
– Haleemur Ali
Nov 26 '18 at 20:04
i'm not sure why but it's actually working in my version of postgreSQL, but i'm using a ORM in my project, which mean it could get automatically filled with the relevant group by clausle, I will add the explicit declaration of the group by columns as you specified, thanks a lot!
– Yuri Scarbaci
Nov 26 '18 at 20:11
add a comment |
This worked like a charm, never usedCASE
, could you explain me why it is required and i can't do it with a normal COUNT(column)from ... where read=false ?
– Yuri Scarbaci
Nov 26 '18 at 20:01
FYI, the query as written will not work on postgresql, because postgresql requires all not aggregated fields to be present in the group by clause. i.e. the group by has to beGROUP BY c.id, c.title, c.deleted, c.created_at
– Haleemur Ali
Nov 26 '18 at 20:04
i'm not sure why but it's actually working in my version of postgreSQL, but i'm using a ORM in my project, which mean it could get automatically filled with the relevant group by clausle, I will add the explicit declaration of the group by columns as you specified, thanks a lot!
– Yuri Scarbaci
Nov 26 '18 at 20:11
This worked like a charm, never used
CASE
, could you explain me why it is required and i can't do it with a normal COUNT(column)from ... where read=false ?– Yuri Scarbaci
Nov 26 '18 at 20:01
This worked like a charm, never used
CASE
, could you explain me why it is required and i can't do it with a normal COUNT(column)from ... where read=false ?– Yuri Scarbaci
Nov 26 '18 at 20:01
FYI, the query as written will not work on postgresql, because postgresql requires all not aggregated fields to be present in the group by clause. i.e. the group by has to be
GROUP BY c.id, c.title, c.deleted, c.created_at
– Haleemur Ali
Nov 26 '18 at 20:04
FYI, the query as written will not work on postgresql, because postgresql requires all not aggregated fields to be present in the group by clause. i.e. the group by has to be
GROUP BY c.id, c.title, c.deleted, c.created_at
– Haleemur Ali
Nov 26 '18 at 20:04
i'm not sure why but it's actually working in my version of postgreSQL, but i'm using a ORM in my project, which mean it could get automatically filled with the relevant group by clausle, I will add the explicit declaration of the group by columns as you specified, thanks a lot!
– Yuri Scarbaci
Nov 26 '18 at 20:11
i'm not sure why but it's actually working in my version of postgreSQL, but i'm using a ORM in my project, which mean it could get automatically filled with the relevant group by clausle, I will add the explicit declaration of the group by columns as you specified, thanks a lot!
– Yuri Scarbaci
Nov 26 '18 at 20:11
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53487736%2fsql-nested-count-for-gurus%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Expected result for sample data would help.
– Radim Bača
Nov 26 '18 at 19:37
Added Expected results VS returned results @RadimBača
– Yuri Scarbaci
Nov 26 '18 at 19:45
sample data are missing
– Radim Bača
Nov 26 '18 at 19:46
What kind of sample data you want? tell me and I will deliver (the database is filled with unrelevant data, it's all in development state)
– Yuri Scarbaci
Nov 26 '18 at 19:47
Some data in tables and expected result for this data
– Radim Bača
Nov 26 '18 at 19:48