簡體   English   中英

MYSQL選擇查詢最常見的產品?

[英]MYSQL select query for most frequent product?

我需要幫助找出如何只為每個分支顯示最常用的產品。

這適用於DB中的每個分支。

PS:這是在一個表中完成的(此性能不需要其他表),並且只需要提到的兩個屬性。

基於Sean的DB示例,我已經創建了查詢,它可以完成這項工作,但是,請注意您在應用程序中的運行方式看起來資源昂貴。 嘗試考慮另一種方法來發現最常見的產品,而不是數據庫查詢。

SELECT 
    a.branch_id, `branch_product` , COUNT(branch_product) AS cnt , b.mx
FROM 
    branch_products a 
LEFT JOIN 
    (SELECT 
        branch_id, MAX(cnt) AS mx 
     FROM 
        (SELECT branch_id, COUNT(branch_product) AS cnt FROM branch_products GROUP BY branch_id, branch_product ) AS maxes 
     GROUP BY branch_id) b 
ON a.branch_id = b.branch_id
GROUP BY branch_id, branch_product
HAVING cnt=mx

將計數放在子查詢中,ORDER BY計數DESC,然后在子查詢GROUP BY之外的分支ID:

SELECT * FROM (
    SELECT *, count(branch_product) AS cou FROM branch_products
    GROUP BY branch_id, branch_product
    ORDER BY cou DESC
) AS ordbycou
GROUP BY branch_id

產量:

+-----------+----------------+-----+
| branch_id | branch_product | cou |
+-----------+----------------+-----+
|         1 | trainers       |   3 |
|         2 | suit           |   2 |
|         3 | suit           |   1 |
+-----------+----------------+-----+
3 rows in set (0.00 sec)

這是一個用於嘗試以上查詢的示例表:

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
CREATE TABLE IF NOT EXISTS `branch_products` (
  `branch_id` mediumint(8) unsigned NOT NULL,
  `branch_product` varchar(128) NOT NULL,
  KEY `branch_id` (`branch_id`),
  KEY `branch_product` (`branch_product`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
INSERT INTO `branch_products` (`branch_id`, `branch_product`) VALUES
(1, 'trainers'),
(1, 'trainers'),
(1, 'trainers'),
(1, 'tie'),
(1, 'tie'),
(1, 'suit'),
(2, 'suit'),
(2, 'suit'),
(2, 'tie'),
(3, 'suit');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM