0

解き方がわからない問題で困っています。私のテーブル「myTable」は次のようになります。

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(11)     | NO   | PRI | NULL    | auto_increment |
| one      | varchar(10) | YES  |     | NULL    |                |
| two      | varchar(10) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

mysql> SELECT * FROM myTable; 

+----+-----------------+------------+
| id | one             | two        |
+----+-----------------+------------+
|  1 | cat             | steve      |
|  2 | cat             | steve      |
|  3 | cat             | adam       |
|  4 | dog             | john       |
|  5 | dog             | adam       |
|  6 | dog             | alice      |
|  7 | mouse           | peter      |
|  8 | mouse           | peter      |
|  9 | mouse           | peter      |
+----+-----------------+------------+

私が求めているのは、「1」の一意の値ごとに「2」の一意の値の数を返すクエリです。つまり、犬 3 (3 つの一意の名前) 猫 2 (2 つの一意の名前) マウス 1 が得られます。 (1 つの一意の名前)

私は周りを検索しましたが、正しい答えを見つける方法がわかりません。

SELECT one, two, COUNT(two) AS nr FROM myTable GROUP BY one, two ORDER BY one;

どんな提案でも大歓迎です!前もって感謝します。

4

1 に答える 1

4

個別の名前を数える必要があるため、distinctキーワードを使用する必要があります。

このクエリを試してください

select 
   one,  
   count(distinct two) as cnt 
from 
   tbl 
group by 
   one

SQL フィドル

|   ONE | CNT |
---------------
|   cat |   2 |
|   dog |   3 |
| mouse |   1 |
于 2013-06-07T07:51:23.077 に答える