2016-12-14 4 views
2

У меня есть таблица с большим количеством столбцов, и я хочу выбрать все столбцы, но мне нужен уникальный один из этих столбцов.Как выбрать все столбцы из таблицы, но с уникальным столбцом

Это работает для меня, но я не получаю все колонки:

$result = mysql_query("SELECT DISTINCT company FROM table t $order"); 

Я также испытал это, но ничего не делают:

$result = mysql_query("SELECT * DISTINCT company FROM table t $order"); 


$result = mysql_query("SELECT DISTINCT company * FROM table t $order"); 

EDIT

Моя таблица имеет много столбцов, скажем, что у него 5, поэтому пример моих записей таков:

company x  y  price numOfEmpl 
one  1  5  1.3  15 
one  2  6  1.4  15 
two  3  7  1.5  16 
three  4  8  1.6  17 

Итак, я хочу отрезать вторую линию и взять всех остальных.

+2

Вы смотрели GROUP BY – RiggsFolly

+0

@RiggsFolly нет, на самом деле я не знаю, как это работает с группой по –

+0

Затем [здесь вам нужно начать исследование] (https://dev.mysql.com/doc /refman/5.7/en/group-by-handling.html) – RiggsFolly

ответ

0

Edited предыдущий ответ, основанный на дополнительной информации

есть решение для Вас в MySQL и SQL Server, если вам это нужно

MySQL Пример (Использование переменных пользователя/Sub-запросы)

CREATE TABLE SomeTable (company VARCHAR(20), x INT, y INT, price FLOAT, numOfEmploy INT); 

INSERT INTO SomeTable 
(company, x, y, price, numOfEmploy) 
VALUES 
('one', 1, 5, 1.3, 15), 
('one', 1, 6, 1.4, 15), 
('two', 1, 7, 1.5, 16), 
('three', 1, 8, 1.6, 17); 

SET @count = NULL, @value = NULL; 
SELECT company, x, y, price, numOfEmploy FROM (
    SELECT 
     company, x, y, price, numOfEmploy, 
     @count := IF(@value = company, @count + 1, 1) AS rc, 
     @value := company 
    FROM SomeTable 
) AS grouped_companies WHERE rc = 1 

SQL-сервера Пример (Использование КТР)

--Create the table 
declare @sometable table (company varchar(10), x int, y int, price float, numOfEmploy int) 

--insert the data 
insert into @sometable values ('one', 1, 5, 1.3, 15) 
insert into @sometable values ('one', 2, 6, 1.4, 15) 
insert into @sometable values ('two', 3, 7, 1.5, 16) 
insert into @sometable values ('three', 4, 8, 1.6, 17) 

--WITH Common Table Expression 
;WITH grouped_companies AS (
     SELECT *, 
     ROW_NUMBER() OVER(PARTITION BY company 
          ORDER BY company) AS rc 
     FROM @sometable) 
SELECT gc.company, gc.x, gc.y, gc.price, gc.numOfEmploy 
FROM grouped_companies gc 
WHERE gc.rc = 1 
+0

Спасибо за ответ, что я должен положить в сумме? (если мне нужны все остальные столбцы) –

+0

В моем примере SUM() добавит вместе все точные ордера для каждой компании. –

+0

Хорошо, если я хочу взять все записи, но вырезать дубликаты, что мне делать? –

0

DISTINCT можно использовать ключевое слово, чтобы возвращать только отдельные (различные) значения в определенных столбцах, как

SELECT DISTINCT column_name,column_name 

или вы можете возвратить сумму несовпадающих значений по

SELECT COUNT(DISTINCT column_name) 

See some samples on W3Schools

Я думаю, вам может понадобиться отдельный sql query для всех записей