2

再会。

结构表在这里

带有外键的原始结构表(不能在 sqlfiddle 中添加)here

代码:

SELECT 
    COUNT(*) as count 
FROM Price p 
    left join Firm f on f.id_service = p.id_service 
              AND f.id_city = p.id_city AND f.id_firm = p.id_firm 
    left join City city on city.id_city = p.id_city 
    left join Producer_country pc on pc.id_producer_country = p.id_producer_country 
    left join Dogovor d on d.id_service=p.id_service 
              AND d.id_city=p.id_city AND d.id_firm=p.id_firm 
WHERE 
    p.id_city='73041' AND p.include='1' 
    AND p.blocked='0' AND f.blocked='0' 
    AND f.dogovor='1' AND d.end_date >= '20131003 17:10:30' 
    AND (p.name LIKE 'test%' COLLATE SQL_Latin1_General_Cp1251_CI_AS) 
GROUP BY 
    p.id_price, 
    p.id_service, 
    p.name, 
    p.name_original, 
    p.id_producer_country, 
    p.id_firm, 
    f.name, 
    f.address, 
    f.phone, 
    city.name, 
    pc.name

我想获得计数行,但结果我得到下一个:

1

如果我在中使用列名count,例如。代码:

SELECT 
    COUNT(p.id_price) as count 

我得到相同的结果...

有人知道如何计算所有行吗?

PS:结果我需要获取唯一行数

p.name, 
p.name_original, 
p.id_producer_country, 
p.id_firm, 
f.name, 
f.address, 
f.phone, 
city.name, 
pc.name
4

2 回答 2

3

只需删除GROUP BY

SELECT 
    COUNT(*) as count 
FROM Price p 
left join Firm f on f.id_service = p.id_service 
            AND f.id_city = p.id_city AND f.id_firm = p.id_firm 
left join City city on city.id_city = p.id_city 
left join Producer_country pc on pc.id_producer_country = p.id_producer_country 
left join Dogovor d on d.id_service=p.id_service 
              AND d.id_city=p.id_city AND d.id_firm=p.id_firm 
WHERE 
    p.id_city='73041' AND p.include='1' 
    AND p.blocked='0' AND f.blocked='0' 
    AND f.dogovor='1' AND d.end_date >= '20131003 17:10:30' 
    AND (p.name LIKE 'test%' COLLATE SQL_Latin1_General_Cp1251_CI_AS);

如果GROUP BY您希望结果集中的每一行都作为一个组,并在GROUP BY. 但在你的情况下,你想要所有行的计数,所以不需要它。

于 2013-10-03T13:43:20.590 回答
0

而不是使用COUNT(*)任何连接表中所需的唯一字段名称来获取单数

于 2013-10-03T13:44:38.903 回答