Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Вывод столбца который не содержится ни в статистической функции, ни в предложении GROUP BY

Есть запрос с подзапросом, в котором 4 столбца - цена, имя продукта, год и месяц продажи. В подзапросе мы получаем общее кол-во продаж всех товаров за каждый месяц каждого года(SUM(Quantity)). В самом запросе - максимальное кол-во продаж одного товара в каждом месяце каждого года(MAX(x.Quantity)). Есть проблема с выводом столбца с именем - при вводе "NAME" в SELECT основного запроса, SQL выдаёт ошибку - "Столбец "x.NAME" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY." Если ввести "NAME" в GROUP BY, запрос выдаёт тоже самое, что и подзапрос.
Помогите пожалуйста хотя бы советом новичку, не знаю как исправить данную ошибку. В приложенных файлах скриншот с выводом запроса и подзапроса, структура БД и сама БД в архиве.
Ответ:
Сообщение от helloworld1
Дальше в основном запросе с помощью MAX(x.Quantity) я нахожу В КАЖДОМ МЕСЯЦЕ КАЖДОГО ГОДА ТОВАР, КОТОРЫЙ ПРОДАЛИ НАИБОЛЬШЕЕ КОЛ-ВО РАЗ.
1) Вы ошибаетесь. С помощью вашего запроса вы выбираете наибольшее поданное в каждом месяце количество товара, а вовсе не число раз его продажи.

2) Какой вопрос вы ставите, на такой вам и отвечают. Написали бы "я не знаю, как составить запрос, который бы выбрал (и описание назнаения запроса)" - вам бы помогли с запосом.
А вы спросили о сообщении об ошибке - и получили ответ как обойти ошибку.

Добавлено через 24 минуты
Если выбрать нужно все-таки товар, проданный в максимальном количестве, то

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
WITH x AS (
SELECT SUM(Quantity) AS qq, YEAR(OrderDate) AS yy, MONTH(OrderDate) AS mm, Details.ProductID
FROM [ORDER Details] AS Details
  JOIN Orders ON Details.OrderID = Orders.OrderID 
GROUP BY YEAR(OrderDate), MONTH(OrderDate), Details.ProductID),
 
y AS ( 
SELECT MAX(x.Quantity) AS mq, yy, mm
FROM x
GROUP BY yy, mm)
 
SELECT y.yy, y.mm, y.mq, Products.ProductName
FROM y
  JOIN x ON x.qq = y.mq AND x.yy = y.YY AND x.MM = y.mm
  JOIN Products ON Products.ProductID = x.ProductID
ORDER BY y.mm, y.mq, Products.ProductName
Добавлено через 4 минуты
А если наибольшее число раз - то в самом начале меняем:
SQL
1
2
WITH x AS (
SELECT COUNT(Orders.OrderID) AS qq,
(далее без изменений)
Вопрос: Вывод столбцов в определенной последовательности

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Dim bdcon As ADODB.Connection
Dim bdrec As ADODB.Recordset
strbd = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & putt & "';"
strSQL = "select * from тест"
Set bdcon = New ADODB.Connection
bdcon.Open strbd
Set bdrec = New ADODB.Recordset
bdrec.Open strSQL, bdcon, adOpenStatic
 
 
 
Recordset
Set Me.основное.Recordset = bdrec
Подскажите пожалуйста в листбок выводится набор записей, но столбцы поменяны местами, не так как в таблице, как сделать что бы они выводились так же как в таблице.

И еще вопрос может кто знает как в листбок сделать что бы определенную строку выделить определенным цветом, если это конечно возможно
Ответ: спасибо
Вопрос: Добавить вывод столбцов в запрос подзапросом

Здравствуйте. Это структура таблицы сообщений пользователей.
CREATE TABLE IF NOT EXISTS `pm` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) DEFAULT NULL,
  `useru_id` int(10) NOT NULL,
  `date` int(10) unsigned NOT NULL,
  `body` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `useru_id` (`useru_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

user_id - кто написал
useru_id - кто получил

Вот запрос для вывода диалогов с кем общался пользователь №2
SELECT p.user_id, p.date, u.id
FROM (
    SELECT IF(useru_id=2,user_id,useru_id) as user_id, MAX(date) as date
    FROM pm
    WHERE useru_id = 2 OR user_id = 2
    GROUP BY IF(useru_id=2,user_id,useru_id)
) as p
LEFT JOIN users u ON u.id=p.user_id
ORDER BY p.date DESC

Необходимо изменить запрос, чтобы к столбцу body тоже выводилась выборка (выводилось последнее сообщение по каждому пользователю с кем имелся диалог в т.ч. если в диалоге последнее сообщение осталось за пользователем №2)
Ответ: Т.е., чтобы получилась система диалогов как в контакте с последним сообщением
Вопрос: Вывод пустых строк в запросе на выборку (не работает левое соединение)

Добрый день, коллеги!

Имеем базу данных, которая во вложении и следующий запрос.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
SELECT dimDate.DateStr, dimMerchandisers.MerchName, tblOrders.Quntity,
 tblSales.Quantity
 
FROM dimDate
 INNER JOIN ((dimMerchandisers
 INNER JOIN tblOrders
   ON dimMerchandisers.id = tblOrders.Merchandisers)
 INNER JOIN tblSales
   ON tblOrders.OrderNo = tblSales.OrderNo)
   ON dimDate.Day = tblOrders.Data
 
WHERE (((dimDate.Month)=201304));
При попытки вывести все записи таблицы dimDate, то есть при замене

FROM dimDate INNER JOIN
на
FROM dimDate LEFT JOIN

выдает ошибку: "Невозможно выполнить инструкцию SQL,так как запрос содержит неоднозначные соединения.
Для явного указания соединения, выполняемого первым, создайте отдельный запрос и включите его в инструкцию SQL"

Подскажите как сделать, чтобы выводились все строки с таблицы dimDate и если в какую-то дату мерчайданзер не продал товара и получал заявок по нему, то в столбцах "OrderQuantity" и "SalesQuantity" нужно отображать нули? Всем спасибо.
Ответ: Коллеги, всем большое спасибо!
Вопрос: Запрос на выборку, групповая операция, вывод столбцов с нулевым значением -если нет данных, то как?

Помогите решить проблему. Пациенты (table1) условно делятся на 3 группы возрастов - связанная таблица table2: 10-19 ( idAgeGroup=1), 20-29 ( idAgeGroup=2) и 30-39 лет ( idAgeGroup=3).
В запросе на выборку (групповая операция - группировка по полю table2.idAgeGroup) против каждой группы возрастов выводится к-во пациентов (Count table1.idPatient) , всего три строки:

группа 10-19 13 чел
группа2 20-29 25 чел
группа 30-39 5 чел

Собственно проблема: если в возрастной группе нет пациентов, то в запросе нет и строки:

группа 10-19 13 чел
группа 30-39 5 чел

а хотелось бы так, что бы выводился ноль:

группа 10-19 13 чел
группа 20-29 0 чел
группа 30-39 5 чел


Буду благодарен за подсказку.
Ответ: Уважаемый ltv_1953, огромное спасибо, то, что и требовалось!
Вопрос: Вывод столбца из mysql

Здравствуйте. Имеется таблица с названиями предметов:

history (id_history, id, subject)

Мне нужно вывести все subject по заданному id, так как в таблице id будет повторяться. Я выбираю столбец так:

Код PHP
1
2
   $history_set = $mysqli->query(" SELECT `subject` FROM `history` WHERE `id`='$id' ");
   $object = $history_set->fetch_assoc();
Но у меня никак не получается через echo вывести этот столбец.

Читал эту , запутался в 4-х таблицах, мне бы на моем примере объяснить.

Спасибо!
Ответ: Спасибо. все заработало! Действительно все так просто
Вопрос: Конкатенация на определенном столбце строки

И снова доброго времени суток уважаемые знатоки своего ремесла!
Подскажите пожалуйста каким образом возможно осуществлять конкатенацию на "определенном" столбце.
т.е.:
чтобы выражение вида:
Visual Basic
1
 [id] & " " & [name] & " " & [description]
результат выражения:
Visual Basic
1
2
3
1 Парк Красивый и зеленый
2 Огород Ухоженный и засаженный
...
выглядело бы вот так:
Visual Basic
1
2
3
1   Парк       Красивый и зеленый
2   Огород     Ухоженный и засаженный
...
т.е. каким то образом указать чтобы [id] начинался с 1-го столбца, [name] начинался с 5-го столбца, [description] с 10-го.
Спасибо
Ответ:
Сообщение от YuryK
зачем в aксе name зарезервировали?
там целый список, а не только name.
Вопрос: Вывод определенной строки из базы данных MySQL

Доброго времени суток !
Допустим есть БД с таблицей и такими строками: id, author, text_name
Например:

id auther text_name
1 Пупкин Новость 1
2 Федоров Новость 2
3 Сидоров Новость 3
4 Иванов Новость 4
На странице идет запрос к БД на вывод таблицы:
Код PHP
1
2
3
4
5
$db = mysql_connect ("сервер","название","пароль");
mysql_select_db ("название",$db);
mysql_set_charset (utf8);
$result = mysql_query ("SELECT author FROM full_text",$db);
$myrow = mysql_fetch_array ($result);
Для вывода на странице обычно используется код:
Код PHP
1
<? echo $myrow ['author']; ?>
Запрос идет на все строки из пункта author. Чтобы вывести имя нужно указывать либо конкретный id либо конкретное имя автора. И тут сам вопрос: можно ли сделать так, чтоб шел запрос на весь пункт author из таблицы, но чтоб каждое имя можно было-бы вывести на страницу в разных местах кода ? И если можно - то как ?
Заранее спасибо )
Ответ: Проблема в том, что у меня в таблице очень много имен авторов и все имена нужно вывести на одной странице, и расположить их в нужном месте нужное имя
Вопрос: Вывод количества строк из разных запросов в один

Доброго времени суток господа.
У меня огромная просьба к знающим людям.

Приношу свои извинения, так как я в access и языке SQL почти полный ноль, поэтому попрошу объяснить по понятнее для "чайника".

В общем мне необходимо вывести в один запрос (так сказать итоговый) данные о количестве строк из других запросов.
Имеется 2 таблицы "БАЗА" и "Справочная", то есть "БАЗА" основная, а "Справочная" с ней связанна по ИД(получается "справочная" является частью "БАЗА" и дополняет ее)

И имеются различные запросы из таблицы "БАЗА" по различным условиям отбора, следовательно каждый запрос имеет свое количество строк в зависимости от условий отбора.

Мне нужно так сказать вывести количество строк из каждого полученного запроса в отдельный "Итоговый запрос". Как это можно сделать подскажите пожалуйста!
А то я замучился уже 2-ю неделю бьюсь, читаю разные справки, но ничего не получается, скорее всего я что то не понимаю, но что это, не могу понять.
Я побывал функцию COUNT через групповые события, но выводится только одно значение из одного запроса. Если добавляю еще одно поле для вывода строк с другими условиями отбора, результат суммируется и не выводится по отдельности в каждом поле.
Если можно это сделать проще например через форму или отчет, пожалуйста помогите.
Ответ: Теперь заработало!!! Спасибо огромное!!! Особенно за подробное объяснение, которое мне как новичку понятно.
Вопрос: Выборка с использованием данных из других строк

Добрый вечер. Подскажите, пожалуйста, как можно решить следующую задачу.

Есть, собственно, база. В ней есть записи такого типа:


Значения sum - это расходы и возвраты. То есть, с карты 100 сперва списали 10, а потом вернули 5.

Суть в том, чтобы используя только sql получить на выходе таблицу, в которой будут только строки с расходами, из которых вычтены возвраты.
То есть, в данном случае, должно получиться такое:


То есть, как я понимаю, нужно при выводе найти строку с положительным значением, потом найти строку с отрицательным значением и таким же номером карты, причем это должна быть ОДНА ближайшая по дате строка.

Как это можно сделать? Сейчас пробую нечто вот такое, но не могу оформить.

#Делаю временную таблицу с возвратами (стоит отметить, что возвратов намного меньше, чем списаний)
CREATE TEMPORARY TABLE returns_sum AS (
    SELECT *
    FROM operations
    WHERE volume > 0
);
 
SELECT * FROM operations
 
LEFT JOIN returns_sum ON (returns_sum.card = operationsa.card AND returns_sum.TIME > returns_sum.TIME)


Но это фигня, так как оно работает от операций, и выбирает любой ближайший возврат, даже если он к другой операции относится...
Подскажите, что тут нужно?
Ответ: найди WHERE sum<0 ORDER BY time DESC limit 1 и пляши от этой строки