gpt4 book ai didi

mysql - 在 SQL (MySQL) 中根据表 1 中的不同 ID 计算表 2 中的不同字段

转载 作者:行者123 更新时间:2023-11-29 14:52:40 25 4
gpt4 key购买 nike

我有 2 张 table :

表 1:

| order_id | shop_id | customer_id | total |  date    |
-------------------------------------------------------
| 9005 | A | 1 | 1205 | 20110210 |
| 9006 | A | 2 | 8591 | 20110212 |
| 9007 | A | 2 | 3472 | 20110216 |
| 9008 | B | 1 | 6310 | 20110218 |
-------------------------------------------------------

表 2:

| shop_id | customer_id | reference |
-------------------------------------
| A | 1 | Friend |
| A | 2 | Internet |
| B | 1 | Friend |
| C | 1 | Friend |
-------------------------------------

我想从 table1 中选择不同的值(shop_id、customer_id)(按日期过滤),然后对 table2 中的引用进行计数。

预期结果:

| reference | count |
---------------------
| Friend | 2 |
| Internet | 1 |
----------------------

到目前为止,我使用的查询是:

SELECT 引用,COUNT(*) 作为计数 FROM table1 JOIN table2 USING(shop_id,customer_id) GROUP BY 引用

结果是:

| reference | count |
---------------------
| Friend | 2 |
| Internet | 2 |
---------------------

问题是计数了 2 次:shop_id=A 和 customer_id=2。这就是为什么“互联网”被计算两次。

有人可以帮我找出问题所在吗?如果可能的话,我希望在不使用子查询的情况下实现这一点(技术限制)。

谢谢。

SQL 转储:

CREATE TABLE `table1` (
`order_id` int(11),
`shop_id` char(1),
`customer_id` int(11),
`total` smallint(6),
`date` date
);

INSERT INTO `table1` (`order_id`, `shop_id`, `customer_id`, `total`, `date`) VALUES
('9005', 'A', '1', '1205', '2011-02-10'),
('9006', 'A', '2', '8591', '2011-02-12'),
('9007', 'A', '2', '3472', '2011-02-16'),
('9008', 'B', '1', '6310', '2011-02-18');

CREATE TABLE `table2` (
`customer_id` int(11),
`shop_id` char(1),
`reference` enum('Friend','Internet')
);

INSERT INTO `table2` (`customer_id`, `shop_id`, `reference`) VALUES
('1', 'A', 'Friend'),
('2', 'A', 'Internet'),
('1', 'B', 'Friend'),
('1', 'C', 'Friend');

最佳答案

我认为这可能对你有用 - 至少它返回预期的结果

SELECT reference,COUNT(distinct(concat(shop_id,'_',customer_id))) as count 
FROM table1 JOIN table2 USING(shop_id,customer_id) GROUP BY reference;

“_”是为了避免混合 store_id 和 customer_id,您可以使用不同的哈希函数来生成唯一的商店/客户 ID

关于mysql - 在 SQL (MySQL) 中根据表 1 中的不同 ID 计算表 2 中的不同字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com