表(userData)如下所示:
userId property value
1 AGE 28
1 GENDER M
2 AGE 28
2 GENDER F
3 AGE 29
3 GENDER F
4 AGE 29
4 GENDER F
所以我想得到类似的东西:
Gender Age Count
M 28 1
F 28 1
F 29 2
答案 0 :(得分:1)
这样的东西?
SELECT
ud1.value AS gender,
ud2.value AS age,
COUNT(*) AS c
FROM userData ud1
JOIN userData ud2 ON
ud1.userId = ud2.userId AND
ud2.property = 'AGE'
WHERE ud1.property = 'GENDER'
GROUP BY gender, age
答案 1 :(得分:0)
-- Not tested
SELECT *
FROM userData age INNER JOIN
userData gender ON gender.userId = age.userId
WHERE age.property = 'AGE'
AND gender.property = 'GENDER'
你会得到
userId property value userId property value
1 AGE 28 1 GENDER M
2 AGE 28 2 GENDER F
3 AGE 29 3 GENDER F
4 AGE 29 4 GENDER F
完成后,您可以COUNT()(未测试):
SELECT age.value, gender.value, COUNT(*)
FROM userData age INNER JOIN
userData gender ON gender.userId = age.userId
WHERE age.property = 'AGE'
AND gender.property = 'GENDER'
GROUP BY age.value, gender.value
答案 2 :(得分:0)
SELECT Gender, Age, COUNT(*) TotalCount
FROM
(
SELECT UserID,
MAX(CASE WHEN property = 'Gender' THEN value END) Gender,
MAX(CASE WHEN property = 'Age' THEN value END) Age
FROM tableName
GROUP BY UserID
) s
GROUP BY Gender, Age
输出
╔════════╦═════╦════════════╗
║ GENDER ║ AGE ║ TOTALCOUNT ║
╠════════╬═════╬════════════╣
║ M ║ 28 ║ 1 ║
║ F ║ 28 ║ 1 ║
║ F ║ 29 ║ 2 ║
╚════════╩═════╩════════════╝