• 締切済み
  • 困ってます

in (サブクエリ) わかんない

table hh; +------+ | id | +------+ | 1 | | 2 | | 3 | | 2 | | 1 | | 1 | +------+ select id,count(*) as cou from hh group by id having count(*) in (1,2,3); こいつはOK select id,count(*) as cou from hh group by id having count(*) in (select count(*) from hh group by id); こいつはダメ 違いはなんですか、教えて下さい

共感・応援の気持ちを伝えよう!

  • MySQL
  • 回答数2
  • 閲覧数235
  • ありがとう数1

みんなの回答

  • 回答No.2
  • t_ohta
  • ベストアンサー率38% (4355/11211)

> mysql Ver5.0.45, これはOK > mysql Ver8.0.12, これはダメ バージョンによってサポートする機能が変わるので、Ver8では何らかの制限が付いたのかもしれませんね。 私の環境はVer 5系でした。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • t_ohta
  • ベストアンサー率38% (4355/11211)

タイプミスじゃないでしょうか? 私の所では問題無く動作しました。(テーブル名は変えてますが) ===== mysql> SELECT * FROM test; +------+ | id | +------+ | 1 | | 2 | | 3 | | 2 | | 2 | | 1 | +------+ 6 rows in set (0.00 sec) mysql> SELECT id, COUNT(*) AS cou FROM test GROUP BY id HAVING COUNT(*) IN (1,2,3); +------+-----+ | id | cou | +------+-----+ | 1 | 2 | | 2 | 3 | | 3 | 1 | +------+-----+ 3 rows in set (0.00 sec) mysql> SELECT id, COUNT(*) AS cou FROM test GROUP BY id HAVING COUNT(*) IN (SELECT COUNT(*) FROM test GROUP BY id); +------+-----+ | id | cou | +------+-----+ | 1 | 2 | | 2 | 3 | | 3 | 1 | +------+-----+ 3 rows in set (0.01 sec)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

mysqlで試してみたらいけるのとダメなのあります t_ohta様のサンプルをコピペしました(テーブル名は別) タイプミスでエラー出てくれたら分かりやすいけど Empty set って事は探してるんでしょ mysql Ver5.0.45, これはOK mysql Ver8.0.12, これはダメ 何か根本的なミスとかあるのかもしれません 分かんないけど勉強を先に進めます

質問者からの補足

解答ありがとうございます、ごめんなさい 標準SQlと考え適当にカテ選択しました、環境は以下です mysql Ver 15.1 Distrib 10.1.36-MariaDB, for Win32 (AMD64) MariaDB [test]> select * from hh; +------+ | id | +------+ | 1 | | 2 | | 3 | | 2 | | 1 | | 1 | +------+ 6 rows in set (0.00 sec) MariaDB [test]> select count(*) from hh group by id; +----------+ | count(*) | +----------+ | 3 | | 2 | | 1 | +----------+ 3 rows in set (0.00 sec) MariaDB [test]> select id,count(*) cou from hh -> group by id -> having count(*) in -> (select count(*) from hh group by id); Empty set (0.02 sec) MariaDB [test]> select id,count(*) cou from hh -> group by id -> having count(*) in (1,2,3); +------+-----+ | id | cou | +------+-----+ | 1 | 3 | | 2 | 2 | | 3 | 1 | +------+-----+ 3 rows in set (0.00 sec)

関連するQ&A

  • Mysql サブクエリの使い方

    table_A ---+------ id | count ---+------ 1 | 5 ---+------ 2 | 6 ---+------ 3 | 7 ---+------ table_B ---+----- id | sub_count ---+----- 1 | 2 ---+------ 2 | 2 ---+------ 3 | 5 ---+------ 1 | 3 ---+------ 2 | 4 ---+------ このようなテーブルで table_Aのcountと、table_Bのidでまとめたsub_countの合計が 一致しないidだけを抽出するために、 SELECT table_A.id FROM (SELECT sum(table_B.sub_count) FROM table_B GROUP BY table_B.id) AS B, table_A, table_B WHERE table_A.id = table_B.id AND table_A.count != sum(table_B.sub_cout) と書いてみましたが、うまくいきません。 ERROR 1111 (HY000): Invalid use of group function 何が悪いのでしょうか? mysqlも投稿も初心者です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • サブクエリに関して()

    $sql2 = 'SELECT ki,id,name,day,tday,st FROM tim WHERE (ki,name,day,st) IN (SELECT ki,name,day,max(st) FROM tim WHERE (ki,name,day) IN (SELECT ki,name,MAX(day) FROM tim where ki='.$_SESSION['ki'].' GROUP BY id) group by id)' ; IDごとにカラムday,stの最大値を出力するもです。(以前おしえていただきました) これに更にsvの最大値も条件にいれたい場合どうしたらいいでしょうか?;

    • 締切済み
    • PHP
  • Access97のクエリーでのDISTINCTROW について

    Access97のクエリーでのDISTINCTROWの解読の仕方がわからず困っています。 SELECT DISTINCTROW テーブル1.番号, テーブル1.D名, テーブル1.E名, FROM テーブル1 WHERE (((テーブル1.番号) In (SELECT [番号] FROM [テーブル1] As Tmp GROUP BY [番号] HAVING Count(*)>1 ))) ORDER BY テーブル1.番号; このSQL文はどういう条件のデータを選択する意味なのでしょうか。 教えてください。

  • 重複レコードのある項目を比較し更新する方法

    nameで重複しているレコードをDateの 最新の日のレコードのIDをTGT_IDに入れたいのですが select * from テーブル名 where name in ( select name from テーブル名 group by name having count(*) > 1 ) と重複したカラムを抽出まではできるのですが そこからどうしたらいいのか分かりません どなたかご教授をお願いします。 ID name date tgt_id 1 A 20040403 2 2 A 20040625 2 3 B 20040429 4 4 B 20040623 4

  • 相関サブクエリの中で、グループ化はできない?

    いつもお世話になっています。 オラクルではないのですが、SQLの質問が多く感じたため、質問させていただきました。 タイトルの通り、相関サブクエリはグループ化した状態で行えるのか教えていただきたいんです。 課題は、売上表(Sales)から、売上数量(Quantity)の平均の10倍よりも売上数量(Quantity)の最大の方が大きい商品IDを見つけ出す。というものです。 考えたSQLは SELECT __S1.ProductID FROM __Sales AS S1 GROUP BY __ProductID HAVING __AVG(Quantity) * 10 < (SELECT    __MAX(Quantity)    FROM    __Sales AS S2    GROUP BY    __ProductID    HAVING    __S1.ProductID = S2.ProductID) です。考え方として 相関サブクエリで、現在の商品ID(HAVING S1.ProductID = S2.ProductIDのところ)の商品数量の最大値を比較として返そうと思いましたが、どうもうまくいきません。 こういった相関サブクエリは作れないのでしょうか?

  • 【MySQL5.7】IDごとの最頻値

    お世話になります。MySQLでidごとの最頻値を抽出しているのですが、 select id, hantei,count(*) as ModeCount from member a group by id,hantei having count(*) >= all(select count(*) from member b where b.id=a.id group by hantei asc) order by id,hantei レコード数は5000件ほどなのですが現在の方法では10.485sと時間がかかりすぎて困っています。MySQLでは最頻値を出すのにサブクエリを使うしかないのでしょうか? こうすればもっと速くなるよって方法があれば教えてください。お願いします。

    • ベストアンサー
    • MySQL
  • サブクエリについて

    サブクエリが上手く行きません、何が間違ってるのでしょうか? select IODate, (select sum(Price) as "収入" from dailyio where IO='収入' group by IODate) , (select sum(Price) as "支出" from dailyio where IO='支出' group by IODate) from dailyio group by IODate; dailyio------------------------------------- フィールド名 型 Code bigint(20) IODate date IO varchar(255) Koumoku varchar(255) Syousai varchar(255) Memo text Price bigint(20) ----------------------------------------------- ご多忙中とは存じますが宜しくご教授お願いします。

    • ベストアンサー
    • MySQL
  • count(*)のcountをとりたい

    現在、以下のようなテーブルを扱っているのですが、 +---------+ |accountid| +---------+ |   999| |   999| |   638| |   638| |   638| |   999| |   999| |   638| +---------+ を、ユニークな件数でとろうとしています。 現在は > select count(*) from TABLE group by accountid; +----------+ | count(*)| +----------+ |     4| |     4| +----------+ 2 rows in set (0.00 sec) などとして、「2 rows in set」を読むと言う方法なのですが、それだと人の手を介さないといけないのでどうにか出力結果をダイレクトに取得したいのです。 SQLサーバで使えるらしい select count(*) from (select count(*) from TABLE group by accountid) as AA; と言うSQL文を使っても無理だったので、どなたか方法をご存じないでしょうか???

    • ベストアンサー
    • MySQL
  • SQLのcount()とgroup by

    以下のようなテーブルがあったとき、 tbl1 id | score 1 | 100 1 | 200 1 | 300 2 | 200 2 | 100 3 | 300 3 | 400 3 | 500 3 | 600 idでまとめて個数を出すとすると、 SELECT count(*) FROM tbl1 group by id とすれば count(*) 3 2 4 と結果が返ってきますが、この結果にidを足して id | count(*) 1 | 3 2 | 2 3 | 4 というようなSQLはどうやって書けばいいのでしょうか? MySQLでは、 SELECT id, count(*) FROM tbl1 group by id と書けるのですが、これは標準的なSQLではNGなそうなので、気になって質問しました。 よろしくお願いします。

  • 重複レコードの一括削除

    重複データを抽出して、重複しているデータ分だけを一括で削除する事は可能でそうか。 SELECT hoge,count(*) AS count FROM テーブル GROUP BY hoge HAVING count>1 このように出せば重複データを出せたのですが、500件ほどレコードがあり、手作業では辛いです。 お力お貸しくださいませm(_ _)m よろしくお願いします。

    • ベストアンサー
    • MySQL