mysql カウントに奇妙な問題があります。実行すると
SELECT a.inc AS inc,
a.cls AS cls,
a.ord AS ord,
a.fam AS fam,
a.subfam AS subfam,
a.gen AS gen,
aspec AS spec,
asubspec AS subspec
FROM a
WHERE (ainc = 11)
私は得る:

私は2つのレコードを持っているので、それは大丈夫です。
実行すると
SELECT COUNT(DISTINCT a.inc) AS inc,
COUNT(DISTINCT a.cls) AS cls,
COUNT(DISTINCT a.ord) AS ord,
COUNT(DISTINCT a.fam) AS fam,
COUNT(DISTINCT asubfam) AS subfam,
COUNT(DISTINCT a.gen) AS gen,
COUNT(DISTINCT a.spec) AS spec,
COUNT(DISTINCT a.subspec) AS subspec
FROM a
WHERE (a.inc = 11)
GROUP BY a.inc
私は得る

gen, spec and subspecご覧のとおり、1行に0の値があるため、これは奇妙です。count distinct私はそれがゼロ値を数えないことを知っています。すべての値をカウントしたい != 0 とカウントの後に個別に取得したい
`1 | 2 | 2 | 2 | 2 | 1 | 1 | 1 |`
私も試します:
SELECT COUNT(DISTINCT a.inc) AS inc,
SUM(if(a.cls <> 0, 1, 0)) AS cls,
SUM(if(a.ord <> 0, 1, 0)) AS ord,
SUM(if(a.fam <> 0, 1, 0)) AS fam,
SUM(if(a.subfam <> 0, 1, 0)) AS subfam,
SUM(if(a.gen <> 0, 1, 0)) AS gen,
SUM(if(a.spec <> 0, 1, 0)) AS spec,
SUM(if(a.subspec <> 0, 1, 0)) AS subspec
FROM a
GROUP BY a.inc
と
SELECT COUNT(DISTINCT a.inc) AS inc,
SUM(DISTINCT if(a.cls <> 0, 1, 0)) AS cls,
SUM(DISTINCT if(a.ord <> 0, 1, 0)) AS ord,
SUM(DISTINCT if(a.fam <> 0, 1, 0)) AS fam,
SUM(DISTINCT if(a.subfam <> 0, 1, 0)) AS subfam,
SUM(DISTINCT if(a.gen <> 0, 1, 0)) AS gen,
SUM(DISTINCT if(a.spec <> 0, 1, 0)) AS spec,
SUM(DISTINCT if(a.subspec <> 0, 1, 0)) AS subspec
FROM a
GROUP BY a.inc
しかし、最初のアプローチでは、0 より大きいすべての重複値を区別して合計しないため、機能しません。2番目のケースでは、 1 と 0 だけを返します。
それで、誰かがそれを手伝ってくれますか?前もって感謝します。レオ