MySQLで期待される結果が得られないことにより、グループ

ローベル:

私は次のクエリを持っています:

SELECT DISTINCT
    bt.name, b.id
FROM
    ports po,
    cities c,
    provinces p,
    countries co,
    states s,
    translations t,
    element_types et,    
    languages l,
    boat_models bm, 
    boat_types bt,
    boats b
        JOIN
    boat_prices bprf ON b.id = bprf.boat_id
        AND bprf.checkin_date IS NULL
        AND bprf.duration_id IS NULL
WHERE
    t.element_translation = 'España'
    AND et.name = 'Country'
    AND s.name = 'confirmed'    
    AND s.id = b.state_id
    AND l.locale = 'es'
    AND t.language_id = l.id
    AND t.element_type_id = et.id
    AND t.element_id = p.country_id        
        AND c.province_id = p.id        
        AND po.city_id = c.id
        AND b.port_id = po.id
        AND bm.id = b.boat_model_id 
        AND bt.id = bm.boat_type_id 

それは完璧に取り組んで9行を返すされています。

'BOAT_TYPE_CATAMARAN','13707'
'BOAT_TYPE_SAILBOAT','13700'
'BOAT_TYPE_SAILBOAT','13701'
'BOAT_TYPE_SAILBOAT','13702'
'BOAT_TYPE_SAILBOAT','13703'
'BOAT_TYPE_SAILBOAT','13704'
'BOAT_TYPE_SAILBOAT','13705'
'BOAT_TYPE_SAILBOAT','13706'
'BOAT_TYPE_SAILBOAT','13708'

私はボートのタイプによってグループに結果をしたいと種類ごとのボートの数を取得します。

しかし、私が行うとき:

SELECT DISTINCT
    bt.name, COUNT(b.id) AS num_boats
FROM
    ports po,
    cities c,
    provinces p,
    countries co,
    states s,
    translations t,
    element_types et,    
    languages l,
    boat_models bm, 
    boat_types bt,
    boats b
        JOIN
    boat_prices bprf ON b.id = bprf.boat_id
        AND bprf.checkin_date IS NULL
        AND bprf.duration_id IS NULL
WHERE
    t.element_translation = 'España'
    AND et.name = 'Country'
    AND s.name = 'confirmed'    
    AND s.id = b.state_id
    AND l.locale = 'es'
    AND t.language_id = l.id
    AND t.element_type_id = et.id
    AND t.element_id = p.country_id        
        AND c.province_id = p.id        
        AND po.city_id = c.id
        AND b.port_id = po.id
        AND bm.id = b.boat_model_id 
        AND bt.id = bm.boat_type_id 
GROUP BY bt.name
ORDER BY bt.name

- 私は取得します:

'BOAT_TYPE_CATAMARAN','241'
'BOAT_TYPE_SAILBOAT','1928'

しかし、最初のクエリによると、 - 私は期待します

'BOAT_TYPE_CATAMARAN','1'
'BOAT_TYPE_SAILBOAT','8'

私は何をしないのですか?

GMB:

私は、あなたがしたいと思われます:

SELECT bt.name, COUNT(DISTINCT b.id) AS num_boats
FROM ...
WHERE ...
GROUP BY bt.name
ORDER BY bt.name

すなわち:移動DISTINCT中にCOUNT()直接ではなくよりにSELECT

一般的に言って、DISTINCTそしてGROUP BYよく一緒に沿って行っていません。DISTINCT両方を混合することは通常は関係ありませんので、既に本質的に集約したものです。

あなたの構文は古い学校を使用して、暗黙的(にコンマと結合することを注意FROM句):あなたは、標準を使用する必要がありますが(と結合ONキーワード)、構文が何十年もの最先端となっています。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=279756&siteId=1