我有一个相当简单的查询:
我有三个表,我想返回每个表使用的行数(有外键)。
这是我的第一次尝试:
SELECT
COUNT(at.code) AS atcount,
COUNT(de.code) AS decount,
COUNT(ch.code) AS chcount
FROM
table_at at,
table_ch ch,
table_de de
WHERE
at.teilnehmerid != 0
AND
de.teilnehmerid != 0
AND
ch.teilnehmerid != 0
但是这种方式不起作用,它不会产生任何错误,但条件只是没有考虑。我还考虑过子查询,例如:
SELECT
(SELECT COUNT(code) FROM table_at at WHERE at.teilnehmerid != 0),
(SELECT COUNT(code) FROM table_de de WHERE de.teilnehmerid != 0),
(SELECT COUNT(code) FROM table_ch ch WHERE ch.teilnehmerid != 0)
但我对这种尝试相当愚蠢的事感到困惑...... FROM
怎么样?
当然我收到一个错误:Operand should contain 1 column(s)
- 但我只是想要计数......
我还阅读了关于加入的内容,但不了解如何通过我的主COUNT
语句中的JOIN
获取SELECT
。
是的,我在这里已经阅读了其他一些问题,但没有看到适用于这两个问题的答案:
和
COUNT
如果我错了,只是没有得到正确的答案,也许更好的解释会有所帮助。
答案 0 :(得分:1)
COUNT (x)
与COUNT(DISTINCT x)
非常不同。前者用多重性计算所有值,后者仅计算不同的值。也许后者就是你想要使用的。
答案 1 :(得分:1)
您可能可以加入表来获取结果,但是如果没有看到表结构以及它们之间的关系,则很难。
您可以使用UNION ALL
:
select count(code) CodeCount, 'atcount' col
from table_at
where teilnehmerid != 0
union all
select count(code) CodeCount, 'chcount' col
from table_ch
where teilnehmerid != 0
union all
select count(code) CodeCount, 'decount' col
from table_de
where teilnehmerid != 0
这将为您提供单个列中的值,然后如果您想要它们在一行中,您可以使用以下内容:
select
max(case when x.col = 'atcount' then x.codecount else 0 end) atcount,
max(case when x.col = 'chcount' then x.codecount else 0 end) chcount,
max(case when x.col = 'decount' then x.codecount else 0 end) decount
from
(
select count(code) CodeCount, 'atcount' col
from table_at
where teilnehmerid != 0
union all
select count(code) CodeCount, 'chcount' col
from table_ch
where teilnehmerid != 0
union all
select count(code) CodeCount, 'decount' col
from table_de
where teilnehmerid != 0
) x
答案 2 :(得分:1)
由于COUNT()
返回单行,单列;怎么样,
SELECT *
FROM
(SELECT COUNT(code) FROM table_at at WHERE teilnehmerid != 0) as T1,
(SELECT COUNT(code) FROM table_de de WHERE teilnehmerid != 0) as T2,
(SELECT COUNT(code) FROM table_ch ch WHERE teilnehmerid != 0) as T3
连接将返回一行。