2016-04-12 3 views
2

Я думал, что у меня это было, но похоже, что я делаю что-то неправильно, и я не могу быть уверен, что.MySQL: Агрегатная функция: группа по объединенной переменной

UPDATE: Я считаю, что ошибка имеет какое-то отношение к соединению между таблицей клиентов и таблицей order_details. Не уверен, что это такое, но любое понимание было бы удивительным!

У меня нет ошибок, он просто ничего не отображает. Это синтаксис? У меня что-то странное происходит? Или это, возможно, организация моих столов?

Заявление проблемы с

SELECT customers.ship_state as 'State', 
     SUM(ROUND(products.product_cost * order_details.quantity_purchased, 2)) as 'Total Sales' 
FROM customers 
JOIN order_details on order_details.customer_id = customers.customer_id 
JOIN products on products.product_id = order_details.product_id 
GROUP BY customers.ship_state 
ORDER BY customers.ship_state ASC; 

ЭТИ CREATE TABLE ОТЧЕТНОСТЬ:

CREATE TABLE customers 
(
customer_ID    int(4)    UNIQUE, 
credit_card_ID   int(10)    NOT NULL, 
cus_fname    varchar(35)   NOT NULL, 
cus_lname    varchar(35)   NOT NULL, 
company_name   varchar(35)   NOT NULL, 
company_phone   varchar(15)   NOT NULL, 
ship_street    varchar(50)   NOT NULL, 
ship_city    varchar(25)   NOT NULL, 
ship_state    varchar(2), 
ship_zip    int(10)    NOT NULL, 
PRIMARY KEY (customer_id), 
FOREIGN KEY (credit_card_ID) REFERENCES credit_cards (credit_card_ID) 
); 

CREATE TABLE products 
(
product_ID    int(10)    UNIQUE, 
product_name   varchar(30)   NOT NULL,   
quantity_stocked  int(5), 
product_cost   dec(8,2)   NOT NULL, 
PRIMARY KEY (product_ID) 
); 

CREATE TABLE order_details 
(
order_ID    int(10)    UNIQUE, 
customer_ID    int(10)    NOT NULL, 
product_ID    int(10)    NOT NULL, 
quantity_purchased  int(5), 
PRIMARY KEY (order_ID), 
FOREIGN KEY (order_ID)  REFERENCES orders (order_ID), 
FOREIGN KEY (customer_ID) REFERENCES customers (customer_ID), 
FOREIGN KEY (product_ID) REFERENCES products (product_ID) 
); 

ЭТИ ВСТАВИТЬ ОТЧЕТНОСТЬ:

INSERT INTO customers VALUES 
(100,1,'Sarah','Jones','Sports Authority','6197254829','1324 River Road','Cincinnati','OH',45225), 
(101,2,'Desmond','Lowell','Sport Chalet','7023468547','3467 W Shaw Ave #103','Fresno','CA',93711), 
(102,3,'Mark','Jefferson','24 HR Fitness','8005557000','3433 E Widget Ave','Palo Alto','CA',92711), 
(103,4,'Jaime','Evans','Crash Athlete','2125554800','828 S Broadway','Tarrytown','NY',10591); 

INSERT INTO products VALUES 
(452,'Nike SS Pro Top',418, 22.99), 
(861,'Nike LunarGlide 7',1082, 74.99), 
(453,'Nike LS Pro Top',654, 64.99), 
(454,'Nike SS Pro Top',720, 64.99), 
(451,'Nike Pro Tank',480, 45.99), 
(485,'Nike 5k Run Short',1402, 24.99), 
(582,'Nike Fit Capri',750, 29.99), 
(591,'Nike Be Fast Tight',1948, 39.99), 
(847,'Nike Legend Tee',120, 34.99), 
(277,'Nike Miller v-neck',1920, 44.99), 
(135,'Adidas Soccer Pant',630, 34.99), 
(456,'Adidas SS Breathe Top',754, 19.99), 
(457,'Adidas Pro Cleat',626, 44.99), 
(214,'Adidas Slide',902, 19.99), 
(054,'Underarmor SL Top',854,54.99), 
(059,'Undersarmor LS High Neck',1021,54.99), 
(574,'Underarmor TR Short',746,24.99), 
(421,'Underarmor TR Balance Shoe',858,84.99); 

INSERT INTO order_details VALUE 
(213,1,452,218), 
(214,2,452,200), 
(215,3,861,300), 
(216,4,861,260), 
(217,1,456,600), 
(218,2,054,430), 
(219,3,421,430), 
(220,4,421,428), 
(221,1,214,500), 
(222,3,582,450), 
(223,2,451,480), 
(224,4,861,300), 
(225,3,591,800), 
(226,2,277,400), 
(227,1,591,800), 
(228,4,054,300), 
(229,2,059,500), 
(230,3,059,521), 
(231,1,574,200), 
(232,2,574,200), 
(233,4,574,200), 
(234,1,135,420), 
(235,2,277,400), 
(236,2,277,400); 
+2

ваш order_detail CUSTOMERID не совпадают с созданных идентификаторов клиента. У клиентов, у вас есть данные заказа 100-103, у вас есть 1-4 в качестве идентификатора клиента. – xQbert

+0

Спасибо .... это было глупо. Я забыл, что я изменил значения в одном и не смог сделать это в другом. – Sierra

+0

Я буду отвечать на любые вопросы, которые вы задаете, если вы продолжаете предоставлять этот уровень детализации. Ваш вопрос был хорошо сформулирован и предоставил все необходимые данные, чтобы предоставить действительное решение! Иногда вам просто нужна вторая пара глаз (или больше) – xQbert

ответ

1

Я скопировал ваши таблицы и смотреть за столом клиентов! Идентификаторы клиентов находятся в 100-х годах. В данных вашего заказа у вас есть идентификаторы вашего клиента в 1-м.

Запрос правильный. Вам просто нужно убедиться, что идентификатор клиента в таблице клиентов соответствует идентификатору клиента в таблице order_details.

Я думаю, вы можете сделать это в качестве обходного пути:

SELECT customers.ship_state as 'State', 
    SUM(ROUND(products.product_cost * order_details.quantity_purchased, 2)) as 'Total Sales' 
FROM customers 
JOIN order_details on order_details.customer_id = customers.credit_card_id 
JOIN products on products.product_id = order_details.product_id 
GROUP BY customers.ship_state 
ORDER BY customers.ship_state ASC; 
+0

Это ужасно глупо и неловко. Спасибо, что помогли с ошибкой. Я буду более осторожен с этим в будущем ... – Sierra

+0

Был уже рассмотрен в комментарии xQbert. – Dresden

Смежные вопросы