Hello All,
I am facing problem in N1QL with the group by. Please find below query for more understanding :
==========================
SELECT
t2.countryIso2,
t2.countryId,
sum(t2.clicks) AS clicks
FROM
(
SELECT
country.iso2 AS countryIso2,
country._id AS countryId,
ca.clicks AS clicks
FROM
(
SELECT
t1.campaignId as campaignId,
ca.key
.v2,
sum(clicks) AS clicks
FROM
(
SELECT
ca.key
.v1 AS campaignId,
ca.key
.v2 ,
ca.data.clicks AS clicks
FROM defaultAna ca
WHERE (ca._type=“CAnalysis” AND ca.report = ‘campReport’)
AND ((ca.date
BETWEEN 1496275200000 AND 1498521600000) OR ca.date
IS NOT VALUED)
) t1 GROUP BY campaignId,ca.key
.v2
) ca
JOIN default campaign ON KEYS ‘Campaign|’ || TOSTRING(ca.campaignId)
JOIN default country ON KEYS “Country|” || TOSTRING(left_campaign.country)
WHERE campaign._type = “Campaign” AND country._type=“Country”
) AS t2
GROUP BY t2.countryIso2,t2.countryId
This query returns me 125 rows
but when I add category field from the Campaign collection in SELECT like below query, then it is restricted to add the column in GROUP BY Clause.
- If I don’t add field in group by clause, then it gives me error “Expression must be a group key or aggregate: (
t2
.`campaignCategory)” - If I add column in GROUP By Clause, it returns wrong number of rows in response.
==========================
SELECT
t2.countryIso2,
t2.countryId,
t2.campaignCategory, //added
sum(t2.clicks) AS clicks
FROM
(
SELECT
country.iso2 AS countryIso2,
country._id AS countryId,
campaign.category AS campaignCategory, // added, this will have value 0 / 1
ca.clicks AS clicks
FROM
(
SELECT
t1.campaignId as campaignId,
ca.key
.v2,
sum(clicks) AS clicks
FROM
(
SELECT
ca.key
.v1 AS campaignId,
ca.key
.v2 ,
ca.data.clicks AS clicks
FROM defaultAna ca
WHERE (ca._type=“CAnalysis” AND ca.report = ‘campReport’)
AND ((ca.date
BETWEEN 1496275200000 AND 1498521600000) OR ca.date
IS NOT VALUED)
) t1 GROUP BY campaignId,ca.key
.v2
) ca
JOIN default campaign ON KEYS ‘Campaign|’ || TOSTRING(ca.campaignId)
JOIN default country ON KEYS “Country|” || TOSTRING(left_campaign.country)
WHERE campaign._type = “Campaign” AND country._type=“Country”
) AS t2
GROUP BY t2.countryIso2,t2.countryId,t2.campaignCategory //added
Please help me to overcome from this problem.
Thanks.