Based upon the following tables (extended to cater for no row handling) :-


The query :-
SELECT avghr, avgbw, avgsc, avgdist, avgc, avgslp FROM
(SELECT avg(heartrate) AS avghr, avg(bodywater) AS avgbw
FROM tbl1 where userid = 1234 AND year = 2018 AND month = 1),
(SELECT avg(stepcount) AS avgsc, avg(distance) AS avgdist, avg(calories) AS avgc, avg(sleep) AS avgslp
FROM tbl2 where userid = 1234 AND year = 2018 AND month = 1)
results in :-

For month 2 :-
SELECT avghr, avgbw, avgsc, avgdist, avgc, avgslp FROM
(SELECT avg(heartrate) AS avghr, avg(bodywater) AS avgbw
FROM tbl1 where userid = 1234 AND year = 2018 AND month = 2),
(SELECT avg(stepcount) AS avgsc, avg(distance) AS avgdist, avg(calories) AS avgc, avg(sleep) AS avgslp
FROM tbl2 where userid = 1234 AND year = 2018 AND month = 2)
results in :-

For month 3 :-
SELECT avghr, avgbw, avgsc, avgdist, avgc, avgslp FROM
(SELECT avg(heartrate) AS avghr, avg(bodywater) AS avgbw
FROM tbl1 where userid = 1234 AND year = 2018 AND month = 3),
(SELECT avg(stepcount) AS avgsc, avg(distance) AS avgdist, avg(calories) AS avgc, avg(sleep) AS avgslp
FROM tbl2 where userid = 1234 AND year = 2018 AND month = 3)
results in :-

If you wanted 0's instead of nulls then the following, longwinded, SQL could be used :-
SELECT avghr, avgbw, avgsc, avgdist, avgc, avgslp, userid, year, month FROM
(SELECT
CASE
WHEN avg(heartrate) IS NULL THEN 0
ELSE avg(heartrate)
END AS avghr,
CASE
WHEN avg(bodywater) IS NULL THEN 0
ELSE avg(bodywater)
END AS avgbw
FROM tbl1 where userid = 1234 AND year = 2018 AND month = 2),
(SELECT
CASE
WHEN avg(stepcount) IS NULL THEN 0
ELSE avg(stepcount)
END AS avgsc,
CASE
WHEN avg(distance) IS NULL THEN 0
ELSE avg(distance)
END AS avgdist,
CASE
WHEN avg(calories) IS NULL THEN 0
ELSE avg(calories)
END AS avgc,
CASE
WHEN avg(sleep) IS NULL THEN 0
ELSE avg(sleep)
END AS avgslp,
userid, year, month
--???? not really needed
-- (if not used remove cols userid, year, month from primary/outer select)
-- as well as from here.
FROM tbl2 where userid = 1234 AND year = 2018 AND month = 2)
This would result in (for month 2, note SQL was saved to a view hence VIEW) :-

Notes
- Table names have been changed for convenience instead of table1, tbl1 was used and likewise instead of table2, tbl2 was used.
- column name userid was used instead of user1d
- The resultant cursor would have column names as per the result (avghr, avgbw etc.)
- The screen shots are from SQLite Manager, data is colour coded according to column type, as per Red = NULL, Green = INTEGER, DARKER GREEN=REAL, Blue = TEXT