web-dev-qa-db-ja.com

IDの最大数を持つSELECT id

Item_idとcolor_idを含む製品テーブルがあります。 null以外のほとんどのインスタンスでcolor_idを取得しようとしています。

これは失敗します:

SELECT color_id 
  FROM products 
 WHERE item_id=1234 
 GROUP BY item_id 
HAVING MAX(COUNT(color_id))

Invalid use of group function

この

SELECT color_id, COUNT(color_id)
  FROM products 
 WHERE item_id=1234 
 GROUP BY item_id

戻り値

color_id count
1, 323
2, 122
3, 554

ほとんどのインスタンスを持つcolor_id 3を探しています。

2つのクエリなしで必要なものをすばやく簡単に取得する方法はありますか?

13
a coder
SELECT color_id AS id, COUNT(color_id) AS count 
FROM products 
WHERE item_id = 1234 AND color_id IS NOT NULL 
GROUP BY color_id 
ORDER BY count DESC
LIMIT 1;

これにより、color_idと、color_idのカウントがカウントの大きい順に並べられます。これがあなたの望むものだと思います。


あなたの編集のために...

SELECT color_id, COUNT(*) FROM products WHERE color_id = 3;
16
matt walters
SELECT color_id
FROM
    (
        SELECT  color_id, COUNT(color_id) totalCount
        FROM    products 
        WHERE   item_id = 1234 
        GROUP   BY color_id 
    ) s
HAVING totalCount = MAX(totalCount)

更新1

SELECT  color_id, COUNT(color_id) totalCount
FROM    products 
WHERE   item_id = 1234 
GROUP   BY color_id 
HAVING  COUNT(color_id) =
(
  SELECT  COUNT(color_id) totalCount
  FROM    products 
  WHERE   item_id = 1234 
  GROUP   BY color_id 
  ORDER BY totalCount DESC
  LIMIT 1  
)
8
John Woo
SELECT 
  color_id, 
  COUNT(color_id) AS occurances
FROM so_test
GROUP BY color_id
ORDER BY occurances DESC
LIMIT 0, 1

以下に、動作を示す基本的なテーブルを備えたフィドルのサンプルを示します。 sql fiddle

1
drneel