15

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 つのクエリを使用せずに、必要なものをすばやく簡単に取得する方法はありますか?

4

4 に答える 4

19
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;
于 2013-01-10T02:03:26.397 に答える
9
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  
)
于 2013-01-10T02:05:18.880 に答える
3
SELECT 
  color_id, 
  COUNT(color_id) AS occurances
FROM so_test
GROUP BY color_id
ORDER BY occurances DESC
LIMIT 0, 1

これが機能していることを示す基本的なテーブルを使用したサンプルフィドルを次に示します。

于 2013-01-10T02:13:16.757 に答える
0

簡単にするために、Oracleの組み込み関数を使用します(Oracle Database 11g+バージョンでのみ動作します):

select stats_mode(color_id) from so_test 

これにより、カラー ID の出現頻度が最も高くなります。

于 2020-11-13T13:52:59.220 に答える