我只能访问数据库,无法更改结果的存储方式。
我有一张这样的桌子
UserID, Gender, Category
'f2', NULL, '2'
'f2', 'female', '2'
'05', 'male', '2'
'06', 'female', '2'
'ee', 'female', '2'
'bd', NULL, '2'
'dd', NULL, '2'
'01', NULL, '2'
这是我现在使用的查询
SELECT
gender,
count(*) count
FROM
user_history
WHERE
1
AND GROUP BY UserID, Gender,Category
这给了我错误的结果,因为它在没有优先考虑性别列的情况下进行合并(删除了性别的 f2)
我怎样才能得到与此类似的结果?预期输出:
性别计数
female 3 (f2,06,ee)
male 1 (only 05 is there)
unknown 3 (f2 has duplicate entries and one of the row has a gender, so I've to give priority to that)
答案 0 :(得分:1)
您可以通过 2 个级别的聚合来实现:
SELECT COALESCE(Gender, 'Unknown') Gender,
COUNT(*) counter
FROM (
SELECT UserID, MAX(Gender) Gender
FROM user_history
GROUP BY UserID
) t
GROUP BY Gender
或者如果您还想按 Category
分组:
SELECT COALESCE(Gender, 'Unknown') Gender,
COUNT(*) counter,
Category
FROM (
SELECT UserID, MAX(Gender) Gender, Category
FROM user_history
GROUP BY UserID, Category
) t
GROUP BY Gender, Category
参见demo。