5

我有一个表,其中每一行都有一个描述字段和一个布尔值。我正在尝试编写一个查询,我可以按每个相应的描述进行分组,并查看布尔值为真的次数百分比。

示例表:

    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 中包含“GROUP BY Gender”语句,但在调整外部 SELECT 之后,我似乎无法弄清楚如何调整内部 SELECT 以获得正确的结果。

4

2 回答 2

7

(我在 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 Fiddle中使用它。


更新:非常相似的想法也适用于 SQLite。请看一下另一个SQL Fiddle

于 2012-06-20T02:04:18.120 回答
2

尝试以下操作:

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
于 2012-06-20T01:47:03.573 回答