我的查询为我提供了以每个字母开头的类别数
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中执行此操作?如果是这样,任何想法我怎么可能这样做?
答案 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.希望这有帮助!对于字母表,我刚刚创建了一个简单的表,其中包含一列和字母表中的每个字母作为值。