我想知道如何写这个查询。

我知道这个实际的语法是虚假的,但它将帮助您理解我想要的东西。

我需要这种格式,因为它是一个更大查询的一部分。

SELECT distributor_id,
COUNT(*) AS TOTAL,
COUNT(*) WHERE level = 'exec',
COUNT(*) WHERE level = 'personal'

我需要在一个查询中返回这一切。

此外,它需要在一行中,所以下面的将不起作用:

'SELECT distributor_id, COUNT(*)
GROUP BY distributor_id'

当前回答

我认为这也适用于你选择count(*)作为anc,(从性别='F'的患者中选择count(*))作为patientF,(从性别='M'的患者中选择count(*)作为patientM从anc

你也可以选择和计数相关的表,像这样选择count(*)作为anc,(select count(*) from Patient where Patient. id =anc. patientid)作为patientF,(select count(*) from Patient where sex='M')作为patientM从anc

其他回答

可以将CASE语句与聚合函数一起使用。这基本上和一些RDBMS中的PIVOT函数是一样的:

SELECT distributor_id,
    count(*) AS total,
    sum(case when level = 'exec' then 1 else 0 end) AS ExecCount,
    sum(case when level = 'personal' then 1 else 0 end) AS PersonalCount
FROM yourtable
GROUP BY distributor_id

在Oracle中,你可以这样做

SELECT
    (SELECT COUNT(*) FROM schema.table1),
    (SELECT COUNT(*) FROM schema.table2),
    ...
    (SELECT COUNT(*) FROM schema.tableN)
FROM DUAL;

对于MySQL,这可以缩短为:

SELECT distributor_id,
    COUNT(*) total,
    SUM(level = 'exec') ExecCount,
    SUM(level = 'personal') PersonalCount
FROM yourtable
GROUP BY distributor_id

最近添加的PIVOT功能可以完全满足您的需要:

SELECT *
FROM ( SELECT level from your_table )
PIVOT ( count(*) for level in ('exec', 'personal') )

我认为这也适用于你选择count(*)作为anc,(从性别='F'的患者中选择count(*))作为patientF,(从性别='M'的患者中选择count(*)作为patientM从anc

你也可以选择和计数相关的表,像这样选择count(*)作为anc,(select count(*) from Patient where Patient. id =anc. patientid)作为patientF,(select count(*) from Patient where sex='M')作为patientM从anc