计算sql查询的输出行?

时间:2013-01-28 15:58:58

标签: mysql

SELECT 
    `list_type`.`type`
FROM
    `events`
        INNER JOIN
    `list_type` ON `events`.`type` = `list_type`.`id`
WHERE
    `events`.`date` BETWEEN '2012-01-01' AND '2012-12-31'
        AND `events`.`center_id` = 2
GROUP BY `events`.`name`

Baseline
Baseline
Baseline
Baseline
Baseline
Baseline
Baseline
Special Events
Special Events
Special Events

但是我希望它能像这样计算每种类型

Baseline    7
Special Events  3

所以我试过这个

SELECT 
    `list_type`.`type`,
    COUNT(*)
FROM
    `events`
        INNER JOIN
    `list_type` ON `events`.`type` = `list_type`.`id`
WHERE
    `events`.`date` BETWEEN '2012-01-01' AND '2012-12-31'
        AND `events`.`center_id` = 2
GROUP BY `events`.`name`

但它给了我这个:

Baseline    45
Baseline    3
Baseline    56
Baseline    23
Baseline    12
Baseline    9
Baseline    2
Special Events  5
Special Events  4
Special Events  18

它计算每个名称的数量和类型而不是输出形式查询。 我也尝试了COUNT(list_typetype) 谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

GROUP然后由list_type.type

编辑
SELECT  list_type.type,
        COUNT(*) totalCount
FROM    events
        INNER JOIN list_type 
            ON events.type = list_type.id
WHERE   events.date BETWEEN '2012-01-01' AND '2012-12-31'
        AND events.center_id = 2
GROUP   BY list_type.type

答案 1 :(得分:0)

请勿按events.name

分组

尝试按list_type分组。type

由于您按事件分组,因此它会根据事件为您提供结果和数字!

答案 2 :(得分:0)

您始终可以使用子查询来计算查询结果,如下所示:

SELECT type, count(*)
FROM (
  ...your query above...
) s
GROUP BY type
它确实会起作用,但它不一定是最好的方法。我认为你应该按list_type.type分组:

GROUP BY list_type.type

然后你必须为每种类型计算不同的事件名称,如下所示:

SELECT 
    `list_type`.`type`,
    COUNT(DISTINCT `events`.`name`)