如何计算以特定字母开头的类别,但仍包含带有' 0'

时间:2015-01-09 10:57:40

标签: php mysql sql

我的查询为我提供了以每个字母开头的类别数

SELECT SUBSTRING(headings.heading,1,1) AS first_letter, COUNT(*) AS cat_count
FROM TABLE a
        INNER JOIN headings
        ON a.Heading=headings.heading 
  GROUP BY first_letter

给我:

A - 5
B - 4
C - 4
D - 2
F - 10
G - 9

等等,直到Z

但我也希望结果包含0计数的字母。 eg. E - 0我猜这可能对SQL很棘手,因为我试图得到一些不存在的东西。我是否必须在PHP中执行此操作?如果是这样,任何想法我怎么可能这样做?

2 个答案:

答案 0 :(得分:0)

如果您的表只包含一个包含所有可能结果的字段(在您的情况下为a-z),则将此表中的外部联接保留为您的数据..

e.g。 FirstLetters表:

Letter
------
A
B
C
..
Y
Z

然后您的查询将变为:

SELECT letter as first_letter, COUNT(a.heading) AS cat_count
FROM 
    FirstLetters l
    left outer join
    TABLE a
    ON left(a.Heading,1)=l.letter 
GROUP BY letter

抱歉,如果这不是100%正确的语法..最近没用过mysql

答案 1 :(得分:0)

这可能对您有用:

WITH Departments AS (
SELECT SUBSTRING(D.Name,1,1) AS First_Letter, COUNT(*) AS name_count
FROM HumanResources.Department D
Group BY SUBSTRING(D.Name,1,1))

SELECT Letter, ISNULL(D.name_count,0)
FROM Letters L
LEFT JOIN Departments D ON L.Letter = D.First_letter

基本上,我使用你的substring语句创建一个带字母数的CTE,然后将它与我的字母表进行比较。如果在部门表中找不到该字母,它将返回0.希望这有帮助!对于字母表,我刚刚创建了一个简单的表,其中包含一列和字母表中的每个字母作为值。