Tabbols
@Tabbols
Математика, программирование.

Как написать запрос с подзапросом SQL?

Дана таблица tov_group , где прописаны группы товаров и их id, также дана таблица tovar, где прописаны id товара id_group (id группы товара), name(наименование товара), ed_izm (единицы измерения товара) и cost(стоимость товара). Необходимо написать такой запрос, который будет выводить список единиц измерения с указанием количества различных групп, в которых есть товары, измеряемые в соответствующих единицах.

Чтобы не было никаких подозрений о том, что я даже не думал, я привожу исх. код. Штука, которую я написал ниже, работает не правильно. Помогите исправить.
SELECT ED_IZM, (SELECT COUNT(ED_IZM) FROM TOVAR) FROM TOVAR GROUP BY ED_IZM
  • Вопрос задан
  • 641 просмотр
Пригласить эксперта
Ответы на вопрос 4
@AlikDex
Таблица:
--
-- Структура таблицы `products`
--

CREATE TABLE IF NOT EXISTS `products` (
  `id` int(11) NOT NULL,
  `id_group` smallint(6) NOT NULL,
  `unit` varchar(20) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `products`
--

INSERT INTO `products` (`id`, `id_group`, `unit`) VALUES
(1, 1, 'метры'),
(2, 2, 'литры'),
(3, 1, 'килограммы'),
(4, 1, 'метры'),
(5, 1, 'литры'),
(6, 2, 'килограммы'),
(7, 1, 'килограммы');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `products`
--
ALTER TABLE `products`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `products`
--
ALTER TABLE `products`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=8;

Запрос без джойнов:
SELECT `unit`, COUNT(DISTINCT `id_group`) 
FROM `products`  
GROUP BY `unit`
Ответ написан
Комментировать
@iegor
Так сджойнь и посчитай айдишники товаров
Ответ написан
@kalapanga
Варианты решения:
1 - Правильный - пойти к своему преподавателю на консультацию/доп.занятие
2 - Неправильный, но тоже рабочий - Заплатить денег другу/знакомому/однокурснику/фрилансеру за решение
А то Вам говорят JOIN, а Вы и слова такого не знаете. А сдаётся мне, что должны знать.
Ответ написан
@vshvydky
в наше время упорство было посильнее, никто не писал на форумы, как решить задачу по проходимому материалу
SELECT
COUNT(t1.ed_izm), t1.ed_izm 
FROM 
(SELECT DISTINCT t.ed_izm, t.id_group FROM tovar t) AS t1 
GROUP BY t1.ed_izm

Результат:

1 кг
1 набор
2 шт

На всякий случай select * from tovar
1 1 Ложка шт 12,00
2 1 Вилка шт 11,00
3 1 Тарелки набор 400,00
4 1 Кастрюли набор 500,00
5 1 Чайники набор 300,00
6 2 Морковь кг 10,00
7 2 Картофель кг 13,00
8 2 Свекла кг 17,00
9 2 Редис кг 9,00
10 2 Лимон шт 5,00
11 2 Апельсин шт 8,00

таблица товар из себя представляет
CREATE TABLE test.tovar (
  id int(11) NOT NULL AUTO_INCREMENT,
  id_group int(11) DEFAULT NULL,
  name varchar(50) DEFAULT NULL,
  ed_izm varchar(255) DEFAULT NULL,
  cost decimal(19, 2) DEFAULT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB
AUTO_INCREMENT = 1
CHARACTER SET utf8
COLLATE utf8_general_ci
ROW_FORMAT = DYNAMIC;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы