[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбрать по разнице в %
SnowWind
Как выбрать строки, в которых price 2 больше price 1 на 5%?

user posted image

Т.е после JOIN у нас получается таблица из которой нужно выбирать строки, где ячейки good.name одинаковые, а price.price 2 > price.price 1 на 5%, где country разные.

Даже не представляю как это сделать.
SnowWind
Цитата (Invis1ble @ 31.01.2018 - 11:20)
price2 / price1 = 1.05

Нет ну это понятно, а как условие само записать-то я не понимаю саму конструкцию, хотя бы просто опишите
depp
price2 / price1 > 1.05
SnowWind
Цитата (depp @ 31.01.2018 - 13:02)
price2 / price1 > 1.05

где-то я уже это видел

мне непонятно как делать выборку это что-то типа Select * From(Select ..... JOIN .... Limit 1) Where price2 / price1 > 1.05 или как?
А главное то, что значения разных строк где значение ячейки good.name одинаковое должны сравниваться
Kusss
SELECT 
c.name AS country,
g.name AS good,
p.price1, p.price2
FROM
`price` AS p
INNER JOIN
`country` AS c ON c.countryid = p.countryid
INNER JOIN
`good` AS g ON g.goodid = p.goodid
WHERE
(p.price2 / p.price1) > 1.05
SnowWind
Цитата (Kusss @ 31.01.2018 - 13:52)
SELECT 
c.name AS country,
g.name AS good,
p.price1, p.price2
FROM
`price` AS p
INNER JOIN
`country` AS c ON c.countryid = p.countryid
INNER JOIN
`good` AS g ON g.goodid = p.goodid
WHERE
(p.price2 / p.price1) > 1.05



Дело в том, что нужно выбрать только те товары у которых значение ячейки good.name одинаковое и разница между price1 и price2 > 5%
Вот так
user posted image
Kusss
Цитата
выбрать только те товары у которых значение ячейки good.name одинаковое

это как ? Я не въезжаю sad.gif
SnowWind
Цитата (Kusss @ 31.01.2018 - 20:50)
Цитата
выбрать только те товары у которых значение ячейки good.name одинаковое

это как ? Я не въезжаю :(

SELECT 
c.name AS country,
g.name AS good,
p.price1, p.price2
FROM
`price` AS p
INNER JOIN
`country` AS c ON c.countryid = p.countryid
INNER JOIN
`good` AS g ON g.goodid = p.goodid
WHERE
(p.price2 / p.price1) > 1.05
HAVING
g.goodid > 1
ORDER BY
g.goodid

так что ли ? Не проверял

Другими словами нужно выбрать те строки в которых goodid одинаковое, но у которых есть разница в 5% между price1 и price2, т.е исходя из картинки выше, надо получить

Array ( [country] => россия [good] => сковородка [price1] => 100 [price2] => 101 )Array ( [country] => китай [good] => сковородка [price1] => 98 [price2] => 101 )

Тут одинаковый ключ сковородка и разница между price1 и price2 > 5%
Kusss
Я не знаю как решить эту задачку.
Если использовать HAVING COUNT(g.goodid) > 1, данные группируются. и выводиться только одна строка
SnowWind
Цитата (Kusss @ 31.01.2018 - 21:33)
Я не знаю как решить эту задачку.
Если использовать HAVING COUNT(g.goodid) > 1, данные группируются. и выводиться только одна строка

Так даже если убрать WHERE (p.price2 / p.price1) > 1.05 оставив HAVING COUNT(g.goodid) > 1 всё равно почему-то выводится 1 строка, хоть таких записей 2
AllesKlar
Цитата (SnowWind @ 31.01.2018 - 23:42)
Так даже если убрать WHERE (p.price2 / p.price1) > 1.05 оставив HAVING COUNT(g.goodid) > 1 всё равно почему-то выводится 1 строка, хоть таких записей 2

Тебе и нужна одна строчка, потому что условию удовлетворяет только один набор значений, хоть и составной

select g.goodid, g.name, concat(c2.name, '::', p2.price1) as price1, concat(c1.name, '::', p1.price2) as price2  
from price p1
join price p2 on (p1.goodid = p2.goodid and p1.countryid <> p2.countryid and (p1.price2 / p2.price1 > 1.05) )
join good g on (g.goodid = p1.goodid)
left join country c1 on p1.countryid = c1.countryid
left join country c2 on p2.countryid = c2.countryid ;


goodid |name       |price1      |price2     |
-------|-----------|------------|-----------|
1 |сковородка |россия::100 |китай::110 |


_____________
[продано копирайтерам]
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.