何れには大きな誤りがあることが私のMYSQLのクエリー?
-
21-09-2019 - |
質問
SELECT
( SELECT
SUM(IF(status = 'Active', 1, 0)) AS `univ_active`,
SUM(IF(status = 'Inactive', 1, 0)) AS 'univ_inactive',
Count(*)
FROM online_university
)
AS tot_university,
( SELECT
SUM(IF(status = 'Active', 1,0)) AS `user_active`,
SUM(IF(status = 'Inactive', 1,0)) AS 'user_inactive'
Count(*)
FROM online_register_user)
AS tot_users
結果
univ_active=4 univ_inactive=2 tot_university=6
user_active=10 user_inactive=3 tot_users = 13
方法を教えてください。上記のクエリを返すエラー: オペランドは1カラム(s)
この報告書類作成のためのプロジェクトからすべてのテーブルに復活不活性、合計の記録からです。このメソッドが間違っていそうはいユーザー?駐日アンゴラ共和国大使館特命全.
解決
サブクエリは、1つの列のみを返すことができます。あなたシングルサブクエリで複数のサブクエリを実行するいずれかの必要性、参加、または安い、連結ハック(CONCAT_WS(',', SUM(IF(status = 'Active', 1,0)), SUM(IF(status = 'Inactive', 1,0))
)。
他のヒント
は、あなたがサブクエリを選択していることを返す2列ます。
SELECT (one_thing, another_thing) AS combined_thing
SQLに存在しません。あなたは自分自身で各サブクエリを配置する必要があります。
SELECT (
SELECT SUM(IF(status='Active', 1, 0)) FROM online_university
) AS univ_active, (
SELECT SUM(IF(status='Inactive', 1, 0)) FROM online_university
) AS univ_inactive, (
SELECT SUM(IF(status='Active' OR status='Inactive', 1, 0)) FROM online_university
) AS tot_university, (
SELECT SUM(IF(status='Active', 1, 0)) FROM online_register_user
) AS user_active, (
-- and so on
しかし、単一のクエリですべてこれを行うにもメリットは本当にありません。はるかに簡単に言ってます:
SELECT COUNT(*) FROM online_university WHERE status='Active'; -- univ_active
SELECT COUNT(*) FROM online_university WHERE status='Inactive'; -- univ_inactive
SELECT COUNT(*) FROM online_university; -- tot_university
SELECT COUNT(*) FROM online_register_user WHERE status='Active'; -- user_active
-- and so on
次に、アプリケーション層で一緒にこれらの結果を提示します。 A句は高速で、どのSUM / IFのような、計算式がないことができます。
適切なインデックスを使用することができますまだシンプルます:
SELECT status, COUNT(*) FROM online_university GROUP BY status;
SELECT status, COUNT(*) FROM online_register_user GROUP BY status;
としてBipedalSharkが言った、あなたのクエリは1列を持っている必要があり、彼らは今、2を持っています。しかし、それ以外にも、あなたはCOUNT(*)と句を使用して考える必要があります。
:だから、このようななめらかでなければなりませんselect
(select count(*) from online_university where status = 'Active') as univ_active,
(select count(*) from online_university where status = 'Inactive') as univ_inactive,
(select count(*) from online_register_user where status = 'Active') as user_active,
(select count(*) from online_register_user where status = 'Active') as user_inactive
によるレイアウトをクエリとしてだけの問題で明らかに別名tot_universityえいに伴う二つの柱がない。。。
ほからこの構文/論理エラーのクエリーらしい低構造の製造をしていきます。
見た目にそっくりの宿題をする、または自己割り当て学んなに甘いシンセサイザーを操作してみてクエリの代わりに、ここにいくつかの例がありますのヒント.
- の情報から二つの無関係なテーブルも利用組合の取得結果、単一クエリを効果的に運二つのクエリーとして活用できますように利用し、余分なカラムがテキストのように'大','Public'他との差別化を図るための二つ)
- 和の場合のカラム=x,1,0)良いトリックカウントが特定の値となく、どうしていくべきなのかについては、グループによる、基本的にセルロース誘導体の数まれています。
- は、concat()トリックが良い場合の焦点は、文字型の結果、例えば、があるのですが、レポート、そうでない場合はこの結果は別々のカラム、さらに処理表示のテーブル。