Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL真实列的百分比_Sql_Sqlite - Fatal编程技术网

SQL真实列的百分比

SQL真实列的百分比,sql,sqlite,Sql,Sqlite,我有一个表,其中每一行都有一个描述字段和一个布尔值。我试图编写一个查询,在这里我可以根据每个描述进行分组,并查看布尔值为真的百分比 示例表: PID Gender SeniorCitizen 1 M 1 2 M 1 3 F 0 4 F 1 5 M 0

我有一个表,其中每一行都有一个描述字段和一个布尔值。我试图编写一个查询,在这里我可以根据每个描述进行分组,并查看布尔值为真的百分比

示例表:

    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;
我一直试图在上面的外部选择中包含“按性别分组”语句,但我似乎不知道如何在调整外部选择后调整内部选择以获得正确的结果。

请尝试以下操作:

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
(我在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
你可以在这里玩



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

回答得好。简单且只扫描表一次。对于MS T-SQL,当我尝试对布尔值(位)执行此操作时,我得到“操作数据类型位对求和运算符无效”,如原始问题所示。@crouser如果
SeniorCitizen
bit
,则需要在求和之前将其强制转换为
int
sum(强制转换为int))