2017-05-20 8 views
-1

によってGROUPとPostgreSQLのSQL文は、SQL文です:MySQLは - > MySQLでの紛争

SELECT count(*) as total 
FROM ossn_entities as e 
JOIN ossn_entities_metadata as emd ON e.guid=emd.guid 
WHERE(e.subtype='gender' AND e.type='user' AND emd.value = 'male') 
GROUP BY e.guid 
ORDER by e.guid ASC ; 
:私は正しい答えを与える

SELECT count(*) as total 
FROM ossn_entities as e 
JOIN ossn_entities_metadata as emd ON e.guid=emd.guid 
WHERE(e.subtype='gender' AND e.type='user' AND emd.value = 'male') 
ORDER by e.guid ASC ; 

5.

私はPostgreSQLでこの文を修正しました

が答えです:

1 
1 
1 
1 
1 

が間違っています。

ため、私はPostgreSQLのエラーのこのMySQLを変更します。

ERROR: column "e.guid" must appear in the GROUP BY clause or be used in an aggregate function 

正解5ない配列を取得するためのMySQLステートメントを変更する方法は?

+0

MySqlは、このコンテキストでは意味をなさないものの、eguid ASCによるORDERを許可します。 'ORDER BY ...を削除するだけです'MySqlクエリから。 – klin

+0

https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-クエリ – Strawberry

答えて

0

私はあなたが単一の値をしたいために、あなたはそれによってGUID、はるかに少ない順序でグループ化することはできません

GROUP BY e.guid ORDER by e.guid ASC 

をドロップするだけで試してみました。 MySQLはおそらくこの不一致を無視しようとします。

+0

ありがとうございます。このソリューションは役立ちます。 – floch

1

あなただけのエラーメッセージの前半をお読みください。

ERROR: column "e.guid" must appear in the GROUP BY clause...

それはあなたがこのケースで欲しいものであること、実際に後半だ:「個々のアイテムによりdoesnのソート

...or be used in an aggregate function

あなたが出力しているものが、それらのアイテムのグループ全体の集計(合計、カウントなど)であるときには意味をなさない。グループ内に50の異なる値がある場合、どちらの値を並べ替えるのですか?e.guid

MySQLには疑問の余地があります。他のほとんどのDBMSはあなたを明確にします。たとえば、最も低い値(ORDER BY MIN(e.guid))または平均値(ORDER BY AVG(e.guid))でソートできます。これは、「集約関数で使用する必要があります」という意味です。

しかし、あなたの例では、あなたは1行だけに戻ってきているので、ORDER BYはとにかくどんな意味がありません - あなたのソート一つのことはどうすればよいですか?したがって、実際のクエリが実際のクエリである場合は、答えはORDER BY e.guidを完全に削除することです。最初は何も実行していないためです。

1

最初のクエリが正しくありません。 MySQLはそれをスリップさせますが、それでも間違っています。 GROUP BYなしで(count(*))を集計すると、1つの結果行が得られます。この1行は​​によって「ソート」されます。行に選択したい​​を指定しないと(たとえば、見つかった最大または最小)、任意に選択された行が取得されます。ただし、ソートされた1行はその1行だけです。単純に並べ替えるものはありません。だから、クエリは、実際にある:MySQLとPostgreSQLの両方で、他のRDBMSについて有効である

SELECT count(*) as total 
FROM ossn_entities as e 
JOIN ossn_entities_metadata as emd ON e.guid = emd.guid 
WHERE e.subtype = 'gender' AND e.type = 'user' AND emd.value = 'male'; 

関連する問題