我有一个表格,其中每行都有一个描述字段和一个布尔值。我正在尝试编写一个查询,我可以在其中按每个相应的描述进行分组,并查看布尔值为真的次数百分比。
示例表:
PID Gender SeniorCitizen
1 M 1
2 M 1
3 F 0
4 F 1
5 M 0
我想要一个将返回以下内容的查询:
Gender SeniorPct
M .66
F .50
我已经到了我有一个查询来计算男性或女性的个人百分比的地步 - 但我想同时看到两个结果
SELECT Gender, COUNT(*) * 1.0 /
(SELECT COUNT(*) FROM MyTable WHERE Gender='M')
FROM MyTable WHERE Gender='M' and SeniorCitizen=1;
我一直在尝试在上面的外部 SELECT 中包含"按性别分组"语句,但我似乎无法弄清楚在调整外部 SELECT 后如何调整内部 SELECT 以获得正确的结果。
我在MySQL下对此进行了测试,请检查是否可以将同样的想法应用于SQLite。
要找到老年人的数量(每个性别),我们可以将这些位视为数字并简单地将它们相加:
SELECT
Gender,
SUM(SeniorCitizen) Seniors
FROM MyTable
GROUP BY Gender
GENDER SENIORS
M 2
F 1
基于此,我们可以轻松计算百分比:
SELECT
Gender,
SUM(SeniorCitizen) / COUNT(*) * 100 SeniorsPct
FROM MyTable
GROUP BY Gender
GENDER SENIORSPCT
M 66.6667
F 50
你可以在这个SQL小提琴中玩它。
更新:非常相似的想法也适用于SQLite。请看另一个SQL小提琴。
尝试以下操作:
CREATE TABLE #MyTable
(
PID INT,
Gender VARCHAR(1),
SeniorCitizen BIT
)
INSERT INTO #MyTable
(
PID,
Gender,
SeniorCitizen
)
SELECT 1, 'M', 1 UNION
SELECT 2, 'M', 1 UNION
SELECT 3, 'F', 0 UNION
SELECT 4, 'F', 1 UNION
SELECT 5, 'M', 0
SELECT
Gender,
COUNT(CASE WHEN SeniorCitizen = 1 THEN 1 END), -- Count of SeniorCitizens grouped by Gender
COUNT(1), -- Count of all users grouped by Gender
CONVERT(DECIMAL(2, 2), -- You can ignore this if you want
COUNT(CASE WHEN SeniorCitizen = 1 THEN 1 END) * 1.0 / COUNT(1) -- Your ratio
)
FROM
#MyTable
GROUP BY
Gender